summaryrefslogtreecommitdiff
path: root/src/prebuilt/ast-parser-gen.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/prebuilt/ast-parser-gen.cc')
-rw-r--r--src/prebuilt/ast-parser-gen.cc1766
1 files changed, 888 insertions, 878 deletions
diff --git a/src/prebuilt/ast-parser-gen.cc b/src/prebuilt/ast-parser-gen.cc
index 0bd083fd..c5765eab 100644
--- a/src/prebuilt/ast-parser-gen.cc
+++ b/src/prebuilt/ast-parser-gen.cc
@@ -78,6 +78,7 @@
#include <stdlib.h>
#include <algorithm>
+#include <utility>
#include "ast-parser.h"
#include "ast-parser-lexer-shared.h"
@@ -138,44 +139,40 @@
field->kind = item; \
} while (0)
-#define APPEND_ITEM_TO_VECTOR(module, Kind, kind, kinds, item_ptr) \
- do { \
- Kind* dummy = item_ptr; \
- append_##kind##_ptr_value(&(module)->kinds, &dummy); \
- } while (0)
+#define APPEND_ITEM_TO_VECTOR(module, kinds, item_ptr) \
+ (module)->kinds.push_back(item_ptr)
#define INSERT_BINDING(module, kind, kinds, loc_, name) \
do \
if ((name).start) { \
(module)->kind##_bindings.emplace( \
string_slice_to_string(name), \
- Binding(loc_, (module)->kinds.size - 1)); \
+ Binding(loc_, (module)->kinds.size() - 1)); \
} \
while (0)
#define APPEND_INLINE_EXPORT(module, Kind, loc_, value, index_) \
do \
- if ((value).export_.has_export) { \
+ if ((value)->export_.has_export) { \
ModuleField* export_field; \
APPEND_FIELD_TO_LIST(module, export_field, Export, export_, loc_, \
- (value).export_.export_); \
- export_field->export_.kind = ExternalKind::Kind; \
- export_field->export_.var.loc = loc_; \
- export_field->export_.var.index = index_; \
- APPEND_ITEM_TO_VECTOR(module, Export, export, exports, \
- &export_field->export_); \
+ (value)->export_.export_.release()); \
+ export_field->export_->kind = ExternalKind::Kind; \
+ export_field->export_->var.loc = loc_; \
+ export_field->export_->var.index = index_; \
+ APPEND_ITEM_TO_VECTOR(module, exports, export_field->export_); \
INSERT_BINDING(module, export, exports, export_field->loc, \
- export_field->export_.name); \
+ export_field->export_->name); \
} \
while (0)
-#define CHECK_IMPORT_ORDERING(module, kind, kinds, loc_) \
- do { \
- if ((module)->kinds.size != (module)->num_##kind##_imports) { \
- ast_parser_error( \
- &loc_, lexer, parser, \
- "imports must occur before all non-import definitions"); \
- } \
+#define CHECK_IMPORT_ORDERING(module, kind, kinds, loc_) \
+ do { \
+ if ((module)->kinds.size() != (module)->num_##kind##_imports) { \
+ ast_parser_error( \
+ &loc_, lexer, parser, \
+ "imports must occur before all non-import definitions"); \
+ } \
} while (0)
#define CHECK_END_LABEL(loc, begin_label, end_label) \
@@ -208,12 +205,6 @@ ExprList join_exprs2(Location* loc,
ExprList* expr1,
Expr* expr2);
-FuncField* new_func_field(void) { return new FuncField(); }
-Command* new_command(void) { return new Command(); }
-Module* new_module(void) { return new Module(); }
-Import* new_import(void) { return new Import(); }
-TextListNode* new_text_list_node(void) { return new TextListNode(); }
-
Result parse_const(Type type,
LiteralType literal_type,
const char* s,
@@ -221,7 +212,7 @@ Result parse_const(Type type,
Const* out);
void dup_text_list(TextList* text_list, char** out_data, size_t* out_size);
-bool is_empty_signature(FuncSignature* sig);
+bool is_empty_signature(const FuncSignature* sig);
void append_implicit_func_declaration(Location*,
Module*,
@@ -240,7 +231,7 @@ static bool on_read_binary_error(uint32_t offset, const char* error,
#define wabt_ast_parser_error ast_parser_error
-#line 244 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:339 */
+#line 235 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:339 */
# ifndef YY_NULLPTR
# if defined __cplusplus && 201103L <= __cplusplus
@@ -387,7 +378,7 @@ int wabt_ast_parser_parse (::wabt::AstLexer* lexer, ::wabt::AstParser* parser);
/* Copy the second part of user declarations. */
-#line 391 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:358 */
+#line 382 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:358 */
#ifdef short
# undef short
@@ -693,24 +684,24 @@ static const yytype_uint8 yytranslate[] =
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 297, 297, 303, 313, 314, 318, 336, 337, 343,
- 346, 351, 358, 361, 362, 366, 371, 378, 381, 384,
- 389, 396, 402, 413, 417, 421, 428, 433, 440, 441,
- 447, 448, 451, 455, 456, 460, 461, 471, 472, 483,
- 484, 485, 488, 491, 494, 497, 500, 504, 508, 513,
- 516, 520, 524, 528, 532, 536, 540, 544, 550, 556,
- 568, 572, 576, 580, 584, 587, 592, 598, 604, 610,
- 620, 628, 632, 635, 641, 647, 656, 662, 667, 673,
- 678, 684, 692, 693, 701, 702, 710, 715, 716, 722,
- 728, 738, 744, 750, 760, 812, 821, 828, 835, 845,
- 848, 852, 858, 869, 875, 895, 902, 914, 921, 941,
- 963, 970, 983, 991, 998, 1004, 1010, 1018, 1023, 1031,
- 1038, 1044, 1050, 1059, 1067, 1072, 1077, 1082, 1089, 1096,
- 1100, 1103, 1114, 1118, 1125, 1129, 1132, 1140, 1148, 1165,
- 1181, 1190, 1197, 1204, 1210, 1246, 1256, 1277, 1287, 1313,
- 1318, 1326, 1334, 1344, 1350, 1356, 1362, 1368, 1374, 1379,
- 1385, 1394, 1399, 1400, 1405, 1414, 1415, 1423, 1435, 1436,
- 1443, 1503
+ 0, 292, 292, 298, 308, 309, 313, 331, 332, 338,
+ 341, 346, 353, 356, 357, 362, 369, 377, 383, 389,
+ 394, 401, 407, 418, 422, 426, 433, 438, 445, 446,
+ 452, 453, 456, 460, 461, 465, 466, 476, 477, 488,
+ 489, 490, 493, 496, 499, 502, 505, 508, 511, 514,
+ 517, 520, 523, 526, 529, 532, 535, 538, 541, 544,
+ 557, 560, 563, 566, 569, 572, 577, 582, 587, 592,
+ 600, 609, 613, 616, 621, 626, 636, 640, 644, 648,
+ 652, 656, 663, 664, 672, 673, 681, 686, 687, 693,
+ 699, 709, 715, 721, 731, 783, 793, 800, 808, 818,
+ 821, 825, 832, 844, 852, 874, 881, 893, 901, 922,
+ 944, 952, 965, 973, 981, 987, 993, 1001, 1006, 1014,
+ 1022, 1028, 1034, 1043, 1051, 1056, 1061, 1066, 1073, 1080,
+ 1084, 1087, 1099, 1104, 1113, 1117, 1120, 1127, 1136, 1153,
+ 1170, 1180, 1186, 1192, 1198, 1231, 1241, 1261, 1272, 1300,
+ 1305, 1313, 1323, 1333, 1339, 1345, 1351, 1357, 1363, 1368,
+ 1374, 1383, 1388, 1389, 1394, 1403, 1404, 1411, 1423, 1424,
+ 1431, 1492
};
#endif
@@ -1649,333 +1640,363 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
switch (yytype)
{
case 5: /* NAT */
-#line 258 "src/ast-parser.y" /* yacc.c:1257 */
+#line 249 "src/ast-parser.y" /* yacc.c:1257 */
{}
-#line 1655 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1646 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 6: /* INT */
-#line 258 "src/ast-parser.y" /* yacc.c:1257 */
+#line 249 "src/ast-parser.y" /* yacc.c:1257 */
{}
-#line 1661 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1652 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 7: /* FLOAT */
-#line 258 "src/ast-parser.y" /* yacc.c:1257 */
+#line 249 "src/ast-parser.y" /* yacc.c:1257 */
{}
-#line 1667 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1658 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 8: /* TEXT */
-#line 258 "src/ast-parser.y" /* yacc.c:1257 */
+#line 249 "src/ast-parser.y" /* yacc.c:1257 */
{}
-#line 1673 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1664 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 9: /* VAR */
-#line 258 "src/ast-parser.y" /* yacc.c:1257 */
+#line 249 "src/ast-parser.y" /* yacc.c:1257 */
{}
-#line 1679 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1670 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 35: /* OFFSET_EQ_NAT */
-#line 258 "src/ast-parser.y" /* yacc.c:1257 */
+#line 249 "src/ast-parser.y" /* yacc.c:1257 */
{}
-#line 1685 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1676 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 36: /* ALIGN_EQ_NAT */
-#line 258 "src/ast-parser.y" /* yacc.c:1257 */
+#line 249 "src/ast-parser.y" /* yacc.c:1257 */
{}
-#line 1691 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1682 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 75: /* non_empty_text_list */
-#line 281 "src/ast-parser.y" /* yacc.c:1257 */
+#line 276 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_text_list(&((*yyvaluep).text_list)); }
-#line 1697 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1688 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 76: /* text_list */
-#line 281 "src/ast-parser.y" /* yacc.c:1257 */
+#line 276 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_text_list(&((*yyvaluep).text_list)); }
-#line 1703 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1694 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 77: /* quoted_text */
-#line 280 "src/ast-parser.y" /* yacc.c:1257 */
+#line 250 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_string_slice(&((*yyvaluep).text)); }
-#line 1709 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1700 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 78: /* value_type_list */
-#line 282 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_type_vector(&((*yyvaluep).types)); }
-#line 1715 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 277 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).types); }
+#line 1706 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+ break;
+
+ case 80: /* global_type */
+#line 269 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).global); }
+#line 1712 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 81: /* func_type */
-#line 272 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_func_signature(&((*yyvaluep).func_sig)); }
-#line 1721 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 267 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).func_sig); }
+#line 1718 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 82: /* func_sig */
+#line 267 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).func_sig); }
+#line 1724 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+ break;
+
+ case 84: /* memory_sig */
#line 272 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_func_signature(&((*yyvaluep).func_sig)); }
-#line 1727 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+ { delete ((*yyvaluep).memory); }
+#line 1730 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 86: /* type_use */
-#line 284 "src/ast-parser.y" /* yacc.c:1257 */
+#line 278 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_var(&((*yyvaluep).var)); }
-#line 1733 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1736 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 88: /* literal */
-#line 278 "src/ast-parser.y" /* yacc.c:1257 */
+#line 251 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_string_slice(&((*yyvaluep).literal).text); }
-#line 1739 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1742 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 89: /* var */
-#line 284 "src/ast-parser.y" /* yacc.c:1257 */
+#line 278 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_var(&((*yyvaluep).var)); }
-#line 1745 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1748 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 90: /* var_list */
-#line 283 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_var_vector_and_elements(&((*yyvaluep).vars)); }
-#line 1751 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 279 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).vars); }
+#line 1754 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 91: /* bind_var_opt */
-#line 280 "src/ast-parser.y" /* yacc.c:1257 */
+#line 250 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_string_slice(&((*yyvaluep).text)); }
-#line 1757 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1760 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 92: /* bind_var */
-#line 280 "src/ast-parser.y" /* yacc.c:1257 */
+#line 250 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_string_slice(&((*yyvaluep).text)); }
-#line 1763 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1766 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 93: /* labeling_opt */
-#line 280 "src/ast-parser.y" /* yacc.c:1257 */
+#line 250 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_string_slice(&((*yyvaluep).text)); }
-#line 1769 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1772 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 96: /* instr */
-#line 269 "src/ast-parser.y" /* yacc.c:1257 */
+#line 264 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_expr_list(((*yyvaluep).expr_list).first); }
-#line 1775 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1778 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 97: /* plain_instr */
-#line 268 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_expr(((*yyvaluep).expr)); }
-#line 1781 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 263 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).expr); }
+#line 1784 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 98: /* block_instr */
-#line 268 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_expr(((*yyvaluep).expr)); }
-#line 1787 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 263 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).expr); }
+#line 1790 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 99: /* block */
-#line 259 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_block(&((*yyvaluep).block)); }
-#line 1793 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 253 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).block); }
+#line 1796 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 100: /* expr */
-#line 269 "src/ast-parser.y" /* yacc.c:1257 */
+#line 264 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_expr_list(((*yyvaluep).expr_list).first); }
-#line 1799 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1802 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 101: /* expr1 */
-#line 269 "src/ast-parser.y" /* yacc.c:1257 */
+#line 264 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_expr_list(((*yyvaluep).expr_list).first); }
-#line 1805 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1808 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 102: /* if_ */
-#line 269 "src/ast-parser.y" /* yacc.c:1257 */
+#line 264 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_expr_list(((*yyvaluep).expr_list).first); }
-#line 1811 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1814 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 103: /* instr_list */
-#line 269 "src/ast-parser.y" /* yacc.c:1257 */
+#line 264 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_expr_list(((*yyvaluep).expr_list).first); }
-#line 1817 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1820 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 104: /* expr_list */
-#line 269 "src/ast-parser.y" /* yacc.c:1257 */
+#line 264 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_expr_list(((*yyvaluep).expr_list).first); }
-#line 1823 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1826 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 105: /* const_expr */
-#line 269 "src/ast-parser.y" /* yacc.c:1257 */
+#line 264 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_expr_list(((*yyvaluep).expr_list).first); }
-#line 1829 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1832 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 106: /* func_fields */
-#line 270 "src/ast-parser.y" /* yacc.c:1257 */
+#line 265 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_func_fields(((*yyvaluep).func_fields)); }
-#line 1835 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1838 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 107: /* func_body */
-#line 270 "src/ast-parser.y" /* yacc.c:1257 */
+#line 265 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_func_fields(((*yyvaluep).func_fields)); }
-#line 1841 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1844 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 108: /* func_info */
-#line 271 "src/ast-parser.y" /* yacc.c:1257 */
+#line 266 "src/ast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func); }
-#line 1847 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1850 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 109: /* func */
-#line 265 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_exported_func(&((*yyvaluep).exported_func)); }
-#line 1853 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 260 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).exported_func); }
+#line 1856 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 110: /* offset */
-#line 269 "src/ast-parser.y" /* yacc.c:1257 */
+#line 264 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_expr_list(((*yyvaluep).expr_list).first); }
-#line 1859 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1862 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 111: /* elem */
-#line 263 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_elem_segment(&((*yyvaluep).elem_segment)); }
-#line 1865 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 258 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).elem_segment); }
+#line 1868 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 112: /* table */
-#line 267 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_exported_table(&((*yyvaluep).exported_table)); }
-#line 1871 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 262 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).exported_table); }
+#line 1874 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 113: /* data */
-#line 275 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_data_segment(&((*yyvaluep).data_segment)); }
-#line 1877 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 257 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).data_segment); }
+#line 1880 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 114: /* memory */
-#line 266 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_exported_memory(&((*yyvaluep).exported_memory)); }
-#line 1883 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 261 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).exported_memory); }
+#line 1886 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 116: /* import_kind */
-#line 274 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_import(((*yyvaluep).import)); delete ((*yyvaluep).import); }
-#line 1889 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 270 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).import); }
+#line 1892 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 117: /* import */
-#line 274 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_import(((*yyvaluep).import)); delete ((*yyvaluep).import); }
-#line 1895 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 270 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).import); }
+#line 1898 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 118: /* inline_import */
-#line 274 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_import(((*yyvaluep).import)); delete ((*yyvaluep).import); }
-#line 1901 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 270 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).import); }
+#line 1904 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 119: /* export_kind */
-#line 264 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_export(&((*yyvaluep).export_)); }
-#line 1907 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 259 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).export_); }
+#line 1910 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 120: /* export */
-#line 264 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_export(&((*yyvaluep).export_)); }
-#line 1913 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 259 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).export_); }
+#line 1916 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+ break;
+
+ case 121: /* inline_export_opt */
+#line 271 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).optional_export); }
+#line 1922 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+ break;
+
+ case 122: /* inline_export */
+#line 271 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).optional_export); }
+#line 1928 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 123: /* type_def */
-#line 273 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_func_type(&((*yyvaluep).func_type)); }
-#line 1919 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 268 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).func_type); }
+#line 1934 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 124: /* start */
-#line 284 "src/ast-parser.y" /* yacc.c:1257 */
+#line 278 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_var(&((*yyvaluep).var)); }
-#line 1925 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1940 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 125: /* module_fields */
-#line 276 "src/ast-parser.y" /* yacc.c:1257 */
+#line 273 "src/ast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).module); }
-#line 1931 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1946 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 126: /* raw_module */
-#line 277 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_raw_module(&((*yyvaluep).raw_module)); }
-#line 1937 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 274 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).raw_module); }
+#line 1952 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 127: /* module */
-#line 276 "src/ast-parser.y" /* yacc.c:1257 */
+#line 273 "src/ast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).module); }
-#line 1943 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1958 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 128: /* script_var_opt */
-#line 284 "src/ast-parser.y" /* yacc.c:1257 */
+#line 278 "src/ast-parser.y" /* yacc.c:1257 */
{ destroy_var(&((*yyvaluep).var)); }
-#line 1949 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 1964 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+ break;
+
+ case 129: /* action */
+#line 252 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).action); }
+#line 1970 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 130: /* assertion */
-#line 260 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_command(((*yyvaluep).command)); delete ((*yyvaluep).command); }
-#line 1955 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 254 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).command); }
+#line 1976 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 131: /* cmd */
-#line 260 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_command(((*yyvaluep).command)); delete ((*yyvaluep).command); }
-#line 1961 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 254 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).command); }
+#line 1982 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 132: /* cmd_list */
-#line 261 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_command_vector_and_elements(&((*yyvaluep).commands)); }
-#line 1967 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 255 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).commands); }
+#line 1988 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 134: /* const_list */
-#line 262 "src/ast-parser.y" /* yacc.c:1257 */
- { destroy_const_vector(&((*yyvaluep).consts)); }
-#line 1973 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 256 "src/ast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).consts); }
+#line 1994 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
case 135: /* script */
-#line 279 "src/ast-parser.y" /* yacc.c:1257 */
+#line 275 "src/ast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).script); }
-#line 1979 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
+#line 2000 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1257 */
break;
@@ -2267,37 +2288,37 @@ yyreduce:
switch (yyn)
{
case 2:
-#line 297 "src/ast-parser.y" /* yacc.c:1646 */
+#line 292 "src/ast-parser.y" /* yacc.c:1646 */
{
- TextListNode* node = new_text_list_node();
+ TextListNode* node = new TextListNode();
DUPTEXT(node->text, (yyvsp[0].text));
node->next = nullptr;
(yyval.text_list).first = (yyval.text_list).last = node;
}
-#line 2278 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2299 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 3:
-#line 303 "src/ast-parser.y" /* yacc.c:1646 */
+#line 298 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.text_list) = (yyvsp[-1].text_list);
- TextListNode* node = new_text_list_node();
+ TextListNode* node = new TextListNode();
DUPTEXT(node->text, (yyvsp[0].text));
node->next = nullptr;
(yyval.text_list).last->next = node;
(yyval.text_list).last = node;
}
-#line 2291 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2312 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 4:
-#line 313 "src/ast-parser.y" /* yacc.c:1646 */
+#line 308 "src/ast-parser.y" /* yacc.c:1646 */
{ (yyval.text_list).first = (yyval.text_list).last = nullptr; }
-#line 2297 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2318 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 6:
-#line 318 "src/ast-parser.y" /* yacc.c:1646 */
+#line 313 "src/ast-parser.y" /* yacc.c:1646 */
{
TextListNode node;
node.text = (yyvsp[0].text);
@@ -2311,130 +2332,140 @@ yyreduce:
(yyval.text).start = data;
(yyval.text).length = size;
}
-#line 2315 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2336 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 7:
-#line 336 "src/ast-parser.y" /* yacc.c:1646 */
- { WABT_ZERO_MEMORY((yyval.types)); }
-#line 2321 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 331 "src/ast-parser.y" /* yacc.c:1646 */
+ { (yyval.types) = new TypeVector(); }
+#line 2342 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 8:
-#line 337 "src/ast-parser.y" /* yacc.c:1646 */
+#line 332 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.types) = (yyvsp[-1].types);
- append_type_value(&(yyval.types), &(yyvsp[0].type));
+ (yyval.types)->push_back((yyvsp[0].type));
}
-#line 2330 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2351 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 9:
-#line 343 "src/ast-parser.y" /* yacc.c:1646 */
+#line 338 "src/ast-parser.y" /* yacc.c:1646 */
{}
-#line 2336 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2357 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 10:
-#line 346 "src/ast-parser.y" /* yacc.c:1646 */
+#line 341 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.global));
- (yyval.global).type = (yyvsp[0].type);
- (yyval.global).mutable_ = false;
+ (yyval.global) = new Global();
+ (yyval.global)->type = (yyvsp[0].type);
+ (yyval.global)->mutable_ = false;
}
-#line 2346 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2367 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 11:
-#line 351 "src/ast-parser.y" /* yacc.c:1646 */
+#line 346 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.global));
- (yyval.global).type = (yyvsp[-1].type);
- (yyval.global).mutable_ = true;
+ (yyval.global) = new Global();
+ (yyval.global)->type = (yyvsp[-1].type);
+ (yyval.global)->mutable_ = true;
}
-#line 2356 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2377 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 12:
-#line 358 "src/ast-parser.y" /* yacc.c:1646 */
+#line 353 "src/ast-parser.y" /* yacc.c:1646 */
{ (yyval.func_sig) = (yyvsp[-1].func_sig); }
-#line 2362 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2383 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 13:
-#line 361 "src/ast-parser.y" /* yacc.c:1646 */
- { WABT_ZERO_MEMORY((yyval.func_sig)); }
-#line 2368 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 356 "src/ast-parser.y" /* yacc.c:1646 */
+ { (yyval.func_sig) = new FuncSignature(); }
+#line 2389 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 14:
-#line 362 "src/ast-parser.y" /* yacc.c:1646 */
+#line 357 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.func_sig));
- (yyval.func_sig).param_types = (yyvsp[-1].types);
+ (yyval.func_sig) = new FuncSignature();
+ (yyval.func_sig)->param_types = std::move(*(yyvsp[-1].types));
+ delete (yyvsp[-1].types);
}
-#line 2377 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2399 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 15:
-#line 366 "src/ast-parser.y" /* yacc.c:1646 */
+#line 362 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.func_sig));
- (yyval.func_sig).param_types = (yyvsp[-5].types);
- (yyval.func_sig).result_types = (yyvsp[-1].types);
+ (yyval.func_sig) = new FuncSignature();
+ (yyval.func_sig)->param_types = std::move(*(yyvsp[-5].types));
+ delete (yyvsp[-5].types);
+ (yyval.func_sig)->result_types = std::move(*(yyvsp[-1].types));
+ delete (yyvsp[-1].types);
}
-#line 2387 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2411 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 16:
-#line 371 "src/ast-parser.y" /* yacc.c:1646 */
+#line 369 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.func_sig));
- (yyval.func_sig).result_types = (yyvsp[-1].types);
+ (yyval.func_sig) = new FuncSignature();
+ (yyval.func_sig)->result_types = std::move(*(yyvsp[-1].types));
+ delete (yyvsp[-1].types);
}
-#line 2396 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2421 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 17:
-#line 378 "src/ast-parser.y" /* yacc.c:1646 */
- { (yyval.table).elem_limits = (yyvsp[-1].limits); }
-#line 2402 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 377 "src/ast-parser.y" /* yacc.c:1646 */
+ {
+ (yyval.table) = new Table();
+ (yyval.table)->elem_limits = (yyvsp[-1].limits);
+ }
+#line 2430 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 18:
-#line 381 "src/ast-parser.y" /* yacc.c:1646 */
- { (yyval.memory).page_limits = (yyvsp[0].limits); }
-#line 2408 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 383 "src/ast-parser.y" /* yacc.c:1646 */
+ {
+ (yyval.memory) = new Memory();
+ (yyval.memory)->page_limits = (yyvsp[0].limits);
+ }
+#line 2439 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 19:
-#line 384 "src/ast-parser.y" /* yacc.c:1646 */
+#line 389 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.limits).has_max = false;
(yyval.limits).initial = (yyvsp[0].u64);
(yyval.limits).max = 0;
}
-#line 2418 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2449 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 20:
-#line 389 "src/ast-parser.y" /* yacc.c:1646 */
+#line 394 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.limits).has_max = true;
(yyval.limits).initial = (yyvsp[-1].u64);
(yyval.limits).max = (yyvsp[0].u64);
}
-#line 2428 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2459 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 21:
-#line 396 "src/ast-parser.y" /* yacc.c:1646 */
+#line 401 "src/ast-parser.y" /* yacc.c:1646 */
{ (yyval.var) = (yyvsp[-1].var); }
-#line 2434 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2465 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 22:
-#line 402 "src/ast-parser.y" /* yacc.c:1646 */
+#line 407 "src/ast-parser.y" /* yacc.c:1646 */
{
if (WABT_FAILED(parse_uint64((yyvsp[0].literal).text.start,
(yyvsp[0].literal).text.start + (yyvsp[0].literal).text.length, &(yyval.u64)))) {
@@ -2443,97 +2474,97 @@ yyreduce:
WABT_PRINTF_STRING_SLICE_ARG((yyvsp[0].literal).text));
}
}
-#line 2447 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2478 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 23:
-#line 413 "src/ast-parser.y" /* yacc.c:1646 */
+#line 418 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.literal).type = (yyvsp[0].literal).type;
DUPTEXT((yyval.literal).text, (yyvsp[0].literal).text);
}
-#line 2456 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2487 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 24:
-#line 417 "src/ast-parser.y" /* yacc.c:1646 */
+#line 422 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.literal).type = (yyvsp[0].literal).type;
DUPTEXT((yyval.literal).text, (yyvsp[0].literal).text);
}
-#line 2465 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2496 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 25:
-#line 421 "src/ast-parser.y" /* yacc.c:1646 */
+#line 426 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.literal).type = (yyvsp[0].literal).type;
DUPTEXT((yyval.literal).text, (yyvsp[0].literal).text);
}
-#line 2474 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2505 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 26:
-#line 428 "src/ast-parser.y" /* yacc.c:1646 */
+#line 433 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.var).loc = (yylsp[0]);
(yyval.var).type = VarType::Index;
(yyval.var).index = (yyvsp[0].u64);
}
-#line 2484 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2515 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 27:
-#line 433 "src/ast-parser.y" /* yacc.c:1646 */
+#line 438 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.var).loc = (yylsp[0]);
(yyval.var).type = VarType::Name;
DUPTEXT((yyval.var).name, (yyvsp[0].text));
}
-#line 2494 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2525 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 28:
-#line 440 "src/ast-parser.y" /* yacc.c:1646 */
- { WABT_ZERO_MEMORY((yyval.vars)); }
-#line 2500 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 445 "src/ast-parser.y" /* yacc.c:1646 */
+ { (yyval.vars) = new VarVector(); }
+#line 2531 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 29:
-#line 441 "src/ast-parser.y" /* yacc.c:1646 */
+#line 446 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.vars) = (yyvsp[-1].vars);
- append_var_value(&(yyval.vars), &(yyvsp[0].var));
+ (yyval.vars)->push_back((yyvsp[0].var));
}
-#line 2509 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2540 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 30:
-#line 447 "src/ast-parser.y" /* yacc.c:1646 */
+#line 452 "src/ast-parser.y" /* yacc.c:1646 */
{ WABT_ZERO_MEMORY((yyval.text)); }
-#line 2515 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2546 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 32:
-#line 451 "src/ast-parser.y" /* yacc.c:1646 */
+#line 456 "src/ast-parser.y" /* yacc.c:1646 */
{ DUPTEXT((yyval.text), (yyvsp[0].text)); }
-#line 2521 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2552 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 33:
-#line 455 "src/ast-parser.y" /* yacc.c:1646 */
+#line 460 "src/ast-parser.y" /* yacc.c:1646 */
{ WABT_ZERO_MEMORY((yyval.text)); }
-#line 2527 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2558 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 35:
-#line 460 "src/ast-parser.y" /* yacc.c:1646 */
+#line 465 "src/ast-parser.y" /* yacc.c:1646 */
{ (yyval.u64) = 0; }
-#line 2533 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2564 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 36:
-#line 461 "src/ast-parser.y" /* yacc.c:1646 */
+#line 466 "src/ast-parser.y" /* yacc.c:1646 */
{
if (WABT_FAILED(parse_int64((yyvsp[0].text).start, (yyvsp[0].text).start + (yyvsp[0].text).length, &(yyval.u64),
ParseIntType::SignedAndUnsigned))) {
@@ -2542,17 +2573,17 @@ yyreduce:
WABT_PRINTF_STRING_SLICE_ARG((yyvsp[0].text)));
}
}
-#line 2546 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2577 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 37:
-#line 471 "src/ast-parser.y" /* yacc.c:1646 */
+#line 476 "src/ast-parser.y" /* yacc.c:1646 */
{ (yyval.u32) = USE_NATURAL_ALIGNMENT; }
-#line 2552 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2583 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 38:
-#line 472 "src/ast-parser.y" /* yacc.c:1646 */
+#line 477 "src/ast-parser.y" /* yacc.c:1646 */
{
if (WABT_FAILED(parse_int32((yyvsp[0].text).start, (yyvsp[0].text).start + (yyvsp[0].text).length, &(yyval.u32),
ParseIntType::UnsignedOnly))) {
@@ -2561,522 +2592,488 @@ yyreduce:
WABT_PRINTF_STRING_SLICE_ARG((yyvsp[0].text)));
}
}
-#line 2565 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2596 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 39:
-#line 483 "src/ast-parser.y" /* yacc.c:1646 */
+#line 488 "src/ast-parser.y" /* yacc.c:1646 */
{ (yyval.expr_list) = join_exprs1(&(yylsp[0]), (yyvsp[0].expr)); }
-#line 2571 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2602 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 40:
-#line 484 "src/ast-parser.y" /* yacc.c:1646 */
+#line 489 "src/ast-parser.y" /* yacc.c:1646 */
{ (yyval.expr_list) = join_exprs1(&(yylsp[0]), (yyvsp[0].expr)); }
-#line 2577 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2608 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 41:
-#line 485 "src/ast-parser.y" /* yacc.c:1646 */
+#line 490 "src/ast-parser.y" /* yacc.c:1646 */
{ (yyval.expr_list) = (yyvsp[0].expr_list); }
-#line 2583 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2614 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 42:
-#line 488 "src/ast-parser.y" /* yacc.c:1646 */
+#line 493 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_unreachable_expr();
+ (yyval.expr) = Expr::CreateUnreachable();
}
-#line 2591 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2622 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 43:
-#line 491 "src/ast-parser.y" /* yacc.c:1646 */
+#line 496 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_nop_expr();
+ (yyval.expr) = Expr::CreateNop();
}
-#line 2599 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2630 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 44:
-#line 494 "src/ast-parser.y" /* yacc.c:1646 */
+#line 499 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_drop_expr();
+ (yyval.expr) = Expr::CreateDrop();
}
-#line 2607 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2638 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 45:
-#line 497 "src/ast-parser.y" /* yacc.c:1646 */
+#line 502 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_select_expr();
+ (yyval.expr) = Expr::CreateSelect();
}
-#line 2615 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2646 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 46:
-#line 500 "src/ast-parser.y" /* yacc.c:1646 */
+#line 505 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_br_expr();
- (yyval.expr)->br.var = (yyvsp[0].var);
+ (yyval.expr) = Expr::CreateBr((yyvsp[0].var));
}
-#line 2624 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2654 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 47:
-#line 504 "src/ast-parser.y" /* yacc.c:1646 */
+#line 508 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_br_if_expr();
- (yyval.expr)->br_if.var = (yyvsp[0].var);
+ (yyval.expr) = Expr::CreateBrIf((yyvsp[0].var));
}
-#line 2633 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2662 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 48:
-#line 508 "src/ast-parser.y" /* yacc.c:1646 */
+#line 511 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_br_table_expr();
- (yyval.expr)->br_table.targets = (yyvsp[-1].vars);
- (yyval.expr)->br_table.default_target = (yyvsp[0].var);
+ (yyval.expr) = Expr::CreateBrTable((yyvsp[-1].vars), (yyvsp[0].var));
}
-#line 2643 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2670 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 49:
-#line 513 "src/ast-parser.y" /* yacc.c:1646 */
+#line 514 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_return_expr();
+ (yyval.expr) = Expr::CreateReturn();
}
-#line 2651 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2678 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 50:
-#line 516 "src/ast-parser.y" /* yacc.c:1646 */
+#line 517 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_call_expr();
- (yyval.expr)->call.var = (yyvsp[0].var);
+ (yyval.expr) = Expr::CreateCall((yyvsp[0].var));
}
-#line 2660 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2686 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 51:
#line 520 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_call_indirect_expr();
- (yyval.expr)->call_indirect.var = (yyvsp[0].var);
+ (yyval.expr) = Expr::CreateCallIndirect((yyvsp[0].var));
}
-#line 2669 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2694 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 52:
-#line 524 "src/ast-parser.y" /* yacc.c:1646 */
+#line 523 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_get_local_expr();
- (yyval.expr)->get_local.var = (yyvsp[0].var);
+ (yyval.expr) = Expr::CreateGetLocal((yyvsp[0].var));
}
-#line 2678 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2702 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 53:
-#line 528 "src/ast-parser.y" /* yacc.c:1646 */
+#line 526 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_set_local_expr();
- (yyval.expr)->set_local.var = (yyvsp[0].var);
+ (yyval.expr) = Expr::CreateSetLocal((yyvsp[0].var));
}
-#line 2687 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2710 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 54:
-#line 532 "src/ast-parser.y" /* yacc.c:1646 */
+#line 529 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_tee_local_expr();
- (yyval.expr)->tee_local.var = (yyvsp[0].var);
+ (yyval.expr) = Expr::CreateTeeLocal((yyvsp[0].var));
}
-#line 2696 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2718 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 55:
-#line 536 "src/ast-parser.y" /* yacc.c:1646 */
+#line 532 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_get_global_expr();
- (yyval.expr)->get_global.var = (yyvsp[0].var);
+ (yyval.expr) = Expr::CreateGetGlobal((yyvsp[0].var));
}
-#line 2705 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2726 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 56:
-#line 540 "src/ast-parser.y" /* yacc.c:1646 */
+#line 535 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_set_global_expr();
- (yyval.expr)->set_global.var = (yyvsp[0].var);
+ (yyval.expr) = Expr::CreateSetGlobal((yyvsp[0].var));
}
-#line 2714 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2734 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 57:
-#line 544 "src/ast-parser.y" /* yacc.c:1646 */
+#line 538 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_load_expr();
- (yyval.expr)->load.opcode = (yyvsp[-2].opcode);
- (yyval.expr)->load.offset = (yyvsp[-1].u64);
- (yyval.expr)->load.align = (yyvsp[0].u32);
+ (yyval.expr) = Expr::CreateLoad((yyvsp[-2].opcode), (yyvsp[0].u32), (yyvsp[-1].u64));
}
-#line 2725 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2742 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 58:
-#line 550 "src/ast-parser.y" /* yacc.c:1646 */
+#line 541 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_store_expr();
- (yyval.expr)->store.opcode = (yyvsp[-2].opcode);
- (yyval.expr)->store.offset = (yyvsp[-1].u64);
- (yyval.expr)->store.align = (yyvsp[0].u32);
+ (yyval.expr) = Expr::CreateStore((yyvsp[-2].opcode), (yyvsp[0].u32), (yyvsp[-1].u64));
}
-#line 2736 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2750 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 59:
-#line 556 "src/ast-parser.y" /* yacc.c:1646 */
+#line 544 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_const_expr();
- (yyval.expr)->const_.loc = (yylsp[-1]);
+ Const const_;
+ WABT_ZERO_MEMORY(const_);
+ const_.loc = (yylsp[-1]);
if (WABT_FAILED(parse_const((yyvsp[-1].type), (yyvsp[0].literal).type, (yyvsp[0].literal).text.start,
- (yyvsp[0].literal).text.start + (yyvsp[0].literal).text.length,
- &(yyval.expr)->const_))) {
+ (yyvsp[0].literal).text.start + (yyvsp[0].literal).text.length, &const_))) {
ast_parser_error(&(yylsp[0]), lexer, parser,
"invalid literal \"" PRIstringslice "\"",
WABT_PRINTF_STRING_SLICE_ARG((yyvsp[0].literal).text));
}
delete [] (yyvsp[0].literal).text.start;
+ (yyval.expr) = Expr::CreateConst(const_);
}
-#line 2753 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2768 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 60:
-#line 568 "src/ast-parser.y" /* yacc.c:1646 */
+#line 557 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_unary_expr();
- (yyval.expr)->unary.opcode = (yyvsp[0].opcode);
+ (yyval.expr) = Expr::CreateUnary((yyvsp[0].opcode));
}
-#line 2762 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2776 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 61:
-#line 572 "src/ast-parser.y" /* yacc.c:1646 */
+#line 560 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_binary_expr();
- (yyval.expr)->binary.opcode = (yyvsp[0].opcode);
+ (yyval.expr) = Expr::CreateBinary((yyvsp[0].opcode));
}
-#line 2771 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2784 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 62:
-#line 576 "src/ast-parser.y" /* yacc.c:1646 */
+#line 563 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_compare_expr();
- (yyval.expr)->compare.opcode = (yyvsp[0].opcode);
+ (yyval.expr) = Expr::CreateCompare((yyvsp[0].opcode));
}
-#line 2780 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2792 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 63:
-#line 580 "src/ast-parser.y" /* yacc.c:1646 */
+#line 566 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_convert_expr();
- (yyval.expr)->convert.opcode = (yyvsp[0].opcode);
+ (yyval.expr) = Expr::CreateConvert((yyvsp[0].opcode));
}
-#line 2789 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2800 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 64:
-#line 584 "src/ast-parser.y" /* yacc.c:1646 */
+#line 569 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_current_memory_expr();
+ (yyval.expr) = Expr::CreateCurrentMemory();
}
-#line 2797 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2808 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 65:
-#line 587 "src/ast-parser.y" /* yacc.c:1646 */
+#line 572 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_grow_memory_expr();
+ (yyval.expr) = Expr::CreateGrowMemory();
}
-#line 2805 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2816 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 66:
-#line 592 "src/ast-parser.y" /* yacc.c:1646 */
+#line 577 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_block_expr();
- (yyval.expr)->block = (yyvsp[-2].block);
- (yyval.expr)->block.label = (yyvsp[-3].text);
- CHECK_END_LABEL((yylsp[0]), (yyval.expr)->block.label, (yyvsp[0].text));
+ (yyval.expr) = Expr::CreateBlock((yyvsp[-2].block));
+ (yyval.expr)->block->label = (yyvsp[-3].text);
+ CHECK_END_LABEL((yylsp[0]), (yyval.expr)->block->label, (yyvsp[0].text));
}
-#line 2816 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2826 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 67:
-#line 598 "src/ast-parser.y" /* yacc.c:1646 */
+#line 582 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_loop_expr();
- (yyval.expr)->loop = (yyvsp[-2].block);
- (yyval.expr)->loop.label = (yyvsp[-3].text);
- CHECK_END_LABEL((yylsp[0]), (yyval.expr)->block.label, (yyvsp[0].text));
+ (yyval.expr) = Expr::CreateLoop((yyvsp[-2].block));
+ (yyval.expr)->loop->label = (yyvsp[-3].text);
+ CHECK_END_LABEL((yylsp[0]), (yyval.expr)->loop->label, (yyvsp[0].text));
}
-#line 2827 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2836 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 68:
-#line 604 "src/ast-parser.y" /* yacc.c:1646 */
+#line 587 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_if_expr();
- (yyval.expr)->if_.true_ = (yyvsp[-2].block);
- (yyval.expr)->if_.true_.label = (yyvsp[-3].text);
- CHECK_END_LABEL((yylsp[0]), (yyval.expr)->block.label, (yyvsp[0].text));
+ (yyval.expr) = Expr::CreateIf((yyvsp[-2].block), nullptr);
+ (yyval.expr)->if_.true_->label = (yyvsp[-3].text);
+ CHECK_END_LABEL((yylsp[0]), (yyval.expr)->if_.true_->label, (yyvsp[0].text));
}
-#line 2838 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2846 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 69:
-#line 610 "src/ast-parser.y" /* yacc.c:1646 */
+#line 592 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr) = new_if_expr();
- (yyval.expr)->if_.true_ = (yyvsp[-5].block);
- (yyval.expr)->if_.true_.label = (yyvsp[-6].text);
- (yyval.expr)->if_.false_ = (yyvsp[-2].expr_list).first;
- CHECK_END_LABEL((yylsp[-3]), (yyval.expr)->block.label, (yyvsp[-3].text));
- CHECK_END_LABEL((yylsp[0]), (yyval.expr)->block.label, (yyvsp[0].text));
+ (yyval.expr) = Expr::CreateIf((yyvsp[-5].block), (yyvsp[-2].expr_list).first);
+ (yyval.expr)->if_.true_->label = (yyvsp[-6].text);
+ CHECK_END_LABEL((yylsp[-3]), (yyval.expr)->if_.true_->label, (yyvsp[-3].text));
+ CHECK_END_LABEL((yylsp[0]), (yyval.expr)->if_.true_->label, (yyvsp[0].text));
}
-#line 2851 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2857 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 70:
-#line 620 "src/ast-parser.y" /* yacc.c:1646 */
+#line 600 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.block));
- (yyval.block).sig = (yyvsp[-1].types);
- (yyval.block).first = (yyvsp[0].expr_list).first;
+ (yyval.block) = new Block();
+ (yyval.block)->sig = std::move(*(yyvsp[-1].types));
+ delete (yyvsp[-1].types);
+ (yyval.block)->first = (yyvsp[0].expr_list).first;
}
-#line 2861 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2868 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 71:
-#line 628 "src/ast-parser.y" /* yacc.c:1646 */
+#line 609 "src/ast-parser.y" /* yacc.c:1646 */
{ (yyval.expr_list) = (yyvsp[-1].expr_list); }
-#line 2867 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2874 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 72:
-#line 632 "src/ast-parser.y" /* yacc.c:1646 */
+#line 613 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.expr_list) = join_exprs2(&(yylsp[-1]), &(yyvsp[0].expr_list), (yyvsp[-1].expr));
}
-#line 2875 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2882 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 73:
-#line 635 "src/ast-parser.y" /* yacc.c:1646 */
+#line 616 "src/ast-parser.y" /* yacc.c:1646 */
{
- Expr* expr = new_block_expr();
- expr->block = (yyvsp[0].block);
- expr->block.label = (yyvsp[-1].text);
+ Expr* expr = Expr::CreateBlock((yyvsp[0].block));
+ expr->block->label = (yyvsp[-1].text);
(yyval.expr_list) = join_exprs1(&(yylsp[-2]), expr);
}
-#line 2886 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2892 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 74:
-#line 641 "src/ast-parser.y" /* yacc.c:1646 */
+#line 621 "src/ast-parser.y" /* yacc.c:1646 */
{
- Expr* expr = new_loop_expr();
- expr->loop = (yyvsp[0].block);
- expr->loop.label = (yyvsp[-1].text);
+ Expr* expr = Expr::CreateLoop((yyvsp[0].block));
+ expr->loop->label = (yyvsp[-1].text);
(yyval.expr_list) = join_exprs1(&(yylsp[-2]), expr);
}
-#line 2897 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2902 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 75:
-#line 647 "src/ast-parser.y" /* yacc.c:1646 */
+#line 626 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.expr_list) = (yyvsp[0].expr_list);
Expr* if_ = (yyvsp[0].expr_list).last;
assert(if_->type == ExprType::If);
- if_->if_.true_.label = (yyvsp[-2].text);
- if_->if_.true_.sig = (yyvsp[-1].types);
+ if_->if_.true_->label = (yyvsp[-2].text);
+ if_->if_.true_->sig = std::move(*(yyvsp[-1].types));
+ delete (yyvsp[-1].types);
}
-#line 2909 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2915 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 76:
-#line 656 "src/ast-parser.y" /* yacc.c:1646 */
+#line 636 "src/ast-parser.y" /* yacc.c:1646 */
{
- Expr* expr = new_if_expr();
- expr->if_.true_.first = (yyvsp[-5].expr_list).first;
- expr->if_.false_ = (yyvsp[-1].expr_list).first;
+ Expr* expr = Expr::CreateIf(new Block((yyvsp[-5].expr_list).first), (yyvsp[-1].expr_list).first);
(yyval.expr_list) = join_exprs1(&(yylsp[-7]), expr);
}
-#line 2920 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2924 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 77:
-#line 662 "src/ast-parser.y" /* yacc.c:1646 */
+#line 640 "src/ast-parser.y" /* yacc.c:1646 */
{
- Expr* expr = new_if_expr();
- expr->if_.true_.first = (yyvsp[-1].expr_list).first;
+ Expr* expr = Expr::CreateIf(new Block((yyvsp[-1].expr_list).first), nullptr);
(yyval.expr_list) = join_exprs1(&(yylsp[-3]), expr);
}
-#line 2930 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2933 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 78:
-#line 667 "src/ast-parser.y" /* yacc.c:1646 */
+#line 644 "src/ast-parser.y" /* yacc.c:1646 */
{
- Expr* expr = new_if_expr();
- expr->if_.true_.first = (yyvsp[-5].expr_list).first;
- expr->if_.false_ = (yyvsp[-1].expr_list).first;
+ Expr* expr = Expr::CreateIf(new Block((yyvsp[-5].expr_list).first), (yyvsp[-1].expr_list).first);
(yyval.expr_list) = join_exprs2(&(yylsp[-8]), &(yyvsp[-8].expr_list), expr);
}
-#line 2941 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2942 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 79:
-#line 673 "src/ast-parser.y" /* yacc.c:1646 */
+#line 648 "src/ast-parser.y" /* yacc.c:1646 */
{
- Expr* expr = new_if_expr();
- expr->if_.true_.first = (yyvsp[-1].expr_list).first;
+ Expr* expr = Expr::CreateIf(new Block((yyvsp[-1].expr_list).first), nullptr);
(yyval.expr_list) = join_exprs2(&(yylsp[-4]), &(yyvsp[-4].expr_list), expr);
}
#line 2951 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 80:
-#line 678 "src/ast-parser.y" /* yacc.c:1646 */
+#line 652 "src/ast-parser.y" /* yacc.c:1646 */
{
- Expr* expr = new_if_expr();
- expr->if_.true_.first = (yyvsp[-1].expr_list).first;
- expr->if_.false_ = (yyvsp[0].expr_list).first;
+ Expr* expr = Expr::CreateIf(new Block((yyvsp[-1].expr_list).first), (yyvsp[0].expr_list).first);
(yyval.expr_list) = join_exprs2(&(yylsp[-2]), &(yyvsp[-2].expr_list), expr);
}
-#line 2962 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2960 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 81:
-#line 684 "src/ast-parser.y" /* yacc.c:1646 */
+#line 656 "src/ast-parser.y" /* yacc.c:1646 */
{
- Expr* expr = new_if_expr();
- expr->if_.true_.first = (yyvsp[0].expr_list).first;
+ Expr* expr = Expr::CreateIf(new Block((yyvsp[0].expr_list).first), nullptr);
(yyval.expr_list) = join_exprs2(&(yylsp[-1]), &(yyvsp[-1].expr_list), expr);
}
-#line 2972 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2969 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 82:
-#line 692 "src/ast-parser.y" /* yacc.c:1646 */
+#line 663 "src/ast-parser.y" /* yacc.c:1646 */
{ WABT_ZERO_MEMORY((yyval.expr_list)); }
-#line 2978 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2975 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 83:
-#line 693 "src/ast-parser.y" /* yacc.c:1646 */
+#line 664 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.expr_list).first = (yyvsp[-1].expr_list).first;
(yyvsp[-1].expr_list).last->next = (yyvsp[0].expr_list).first;
(yyval.expr_list).last = (yyvsp[0].expr_list).last ? (yyvsp[0].expr_list).last : (yyvsp[-1].expr_list).last;
(yyval.expr_list).size = (yyvsp[-1].expr_list).size + (yyvsp[0].expr_list).size;
}
-#line 2989 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2986 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 84:
-#line 701 "src/ast-parser.y" /* yacc.c:1646 */
+#line 672 "src/ast-parser.y" /* yacc.c:1646 */
{ WABT_ZERO_MEMORY((yyval.expr_list)); }
-#line 2995 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 2992 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 85:
-#line 702 "src/ast-parser.y" /* yacc.c:1646 */
+#line 673 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.expr_list).first = (yyvsp[-1].expr_list).first;
(yyvsp[-1].expr_list).last->next = (yyvsp[0].expr_list).first;
(yyval.expr_list).last = (yyvsp[0].expr_list).last ? (yyvsp[0].expr_list).last : (yyvsp[-1].expr_list).last;
(yyval.expr_list).size = (yyvsp[-1].expr_list).size + (yyvsp[0].expr_list).size;
}
-#line 3006 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3003 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 88:
-#line 716 "src/ast-parser.y" /* yacc.c:1646 */
+#line 687 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.func_fields) = new_func_field();
+ (yyval.func_fields) = new FuncField();
(yyval.func_fields)->type = FuncFieldType::ResultTypes;
(yyval.func_fields)->types = (yyvsp[-2].types);
(yyval.func_fields)->next = (yyvsp[0].func_fields);
}
-#line 3017 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3014 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 89:
-#line 722 "src/ast-parser.y" /* yacc.c:1646 */
+#line 693 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.func_fields) = new_func_field();
+ (yyval.func_fields) = new FuncField();
(yyval.func_fields)->type = FuncFieldType::ParamTypes;
(yyval.func_fields)->types = (yyvsp[-2].types);
(yyval.func_fields)->next = (yyvsp[0].func_fields);
}
-#line 3028 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3025 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 90:
-#line 728 "src/ast-parser.y" /* yacc.c:1646 */
+#line 699 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.func_fields) = new_func_field();
+ (yyval.func_fields) = new FuncField();
(yyval.func_fields)->type = FuncFieldType::BoundParam;
(yyval.func_fields)->bound_type.loc = (yylsp[-4]);
(yyval.func_fields)->bound_type.name = (yyvsp[-3].text);
(yyval.func_fields)->bound_type.type = (yyvsp[-2].type);
(yyval.func_fields)->next = (yyvsp[0].func_fields);
}
-#line 3041 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3038 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 91:
-#line 738 "src/ast-parser.y" /* yacc.c:1646 */
+#line 709 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.func_fields) = new_func_field();
+ (yyval.func_fields) = new FuncField();
(yyval.func_fields)->type = FuncFieldType::Exprs;
(yyval.func_fields)->first_expr = (yyvsp[0].expr_list).first;
(yyval.func_fields)->next = nullptr;
}
-#line 3052 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3049 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 92:
-#line 744 "src/ast-parser.y" /* yacc.c:1646 */
+#line 715 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.func_fields) = new_func_field();
+ (yyval.func_fields) = new FuncField();
(yyval.func_fields)->type = FuncFieldType::LocalTypes;
(yyval.func_fields)->types = (yyvsp[-2].types);
(yyval.func_fields)->next = (yyvsp[0].func_fields);
}
-#line 3063 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3060 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 93:
-#line 750 "src/ast-parser.y" /* yacc.c:1646 */
+#line 721 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.func_fields) = new_func_field();
+ (yyval.func_fields) = new FuncField();
(yyval.func_fields)->type = FuncFieldType::BoundLocal;
(yyval.func_fields)->bound_type.loc = (yylsp[-4]);
(yyval.func_fields)->bound_type.name = (yyvsp[-3].text);
(yyval.func_fields)->bound_type.type = (yyvsp[-2].type);
(yyval.func_fields)->next = (yyvsp[0].func_fields);
}
-#line 3076 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3073 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 94:
-#line 760 "src/ast-parser.y" /* yacc.c:1646 */
+#line 731 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.func) = new Func();
FuncField* field = (yyvsp[0].func_fields);
@@ -3086,15 +3083,16 @@ yyreduce:
switch (field->type) {
case FuncFieldType::Exprs:
(yyval.func)->first_expr = field->first_expr;
+ field->first_expr = nullptr;
break;
case FuncFieldType::ParamTypes:
case FuncFieldType::LocalTypes: {
- TypeVector* types = field->type == FuncFieldType::ParamTypes
- ? &(yyval.func)->decl.sig.param_types
- : &(yyval.func)->local_types;
- extend_types(types, &field->types);
- destroy_type_vector(&field->types);
+ TypeVector& types = field->type == FuncFieldType::ParamTypes
+ ? (yyval.func)->decl.sig.param_types
+ : (yyval.func)->local_types;
+ types.insert(types.end(), field->types->begin(),
+ field->types->end());
break;
}
@@ -3110,602 +3108,618 @@ yyreduce:
bindings = &(yyval.func)->local_bindings;
}
- append_type_value(types, &field->bound_type.type);
- bindings->emplace(string_slice_to_string(field->bound_type.name),
- Binding(field->bound_type.loc, types->size - 1));
- destroy_string_slice(&field->bound_type.name);
+ types->push_back(field->bound_type.type);
+ bindings->emplace(
+ string_slice_to_string(field->bound_type.name),
+ Binding(field->bound_type.loc, types->size() - 1));
break;
}
case FuncFieldType::ResultTypes:
- (yyval.func)->decl.sig.result_types = field->types;
+ (yyval.func)->decl.sig.result_types = std::move(*field->types);
break;
}
- /* we steal memory from the func field, but not the linked list nodes */
delete field;
field = next;
}
}
-#line 3131 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3128 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 95:
-#line 812 "src/ast-parser.y" /* yacc.c:1646 */
+#line 783 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.exported_func));
- (yyval.exported_func).func = (yyvsp[-1].func);
- (yyval.exported_func).func->decl.flags |= WABT_FUNC_DECLARATION_FLAG_HAS_FUNC_TYPE;
- (yyval.exported_func).func->decl.type_var = (yyvsp[-2].var);
- (yyval.exported_func).func->name = (yyvsp[-4].text);
- (yyval.exported_func).export_ = (yyvsp[-3].optional_export);
+ (yyval.exported_func) = new ExportedFunc();
+ (yyval.exported_func)->func.reset((yyvsp[-1].func));
+ (yyval.exported_func)->func->decl.has_func_type = true;
+ (yyval.exported_func)->func->decl.type_var = (yyvsp[-2].var);
+ (yyval.exported_func)->func->name = (yyvsp[-4].text);
+ (yyval.exported_func)->export_ = std::move(*(yyvsp[-3].optional_export));
+ delete (yyvsp[-3].optional_export);
}
-#line 3144 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3142 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 96:
-#line 821 "src/ast-parser.y" /* yacc.c:1646 */
+#line 793 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.exported_func));
- (yyval.exported_func).func = (yyvsp[-1].func);
- (yyval.exported_func).func->decl.flags |= WABT_FUNC_DECLARATION_FLAG_HAS_FUNC_TYPE;
- (yyval.exported_func).func->decl.type_var = (yyvsp[-2].var);
- (yyval.exported_func).func->name = (yyvsp[-3].text);
+ (yyval.exported_func) = new ExportedFunc();
+ (yyval.exported_func)->func.reset((yyvsp[-1].func));
+ (yyval.exported_func)->func->decl.has_func_type = true;
+ (yyval.exported_func)->func->decl.type_var = (yyvsp[-2].var);
+ (yyval.exported_func)->func->name = (yyvsp[-3].text);
}
-#line 3156 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3154 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 97:
-#line 828 "src/ast-parser.y" /* yacc.c:1646 */
+#line 800 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.exported_func));
- (yyval.exported_func).func = (yyvsp[-1].func);
- (yyval.exported_func).func->name = (yyvsp[-3].text);
- (yyval.exported_func).export_ = (yyvsp[-2].optional_export);
+ (yyval.exported_func) = new ExportedFunc();
+ (yyval.exported_func)->func.reset((yyvsp[-1].func));
+ (yyval.exported_func)->func->name = (yyvsp[-3].text);
+ (yyval.exported_func)->export_ = std::move(*(yyvsp[-2].optional_export));
+ delete (yyvsp[-2].optional_export);
}
-#line 3167 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3166 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 98:
-#line 835 "src/ast-parser.y" /* yacc.c:1646 */
+#line 808 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.exported_func));
- (yyval.exported_func).func = (yyvsp[-1].func);
- (yyval.exported_func).func->name = (yyvsp[-2].text);
+ (yyval.exported_func) = new ExportedFunc();
+ (yyval.exported_func)->func.reset((yyvsp[-1].func));
+ (yyval.exported_func)->func->name = (yyvsp[-2].text);
}
-#line 3177 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3176 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 99:
-#line 845 "src/ast-parser.y" /* yacc.c:1646 */
+#line 818 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.expr_list) = (yyvsp[-1].expr_list);
}
-#line 3185 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3184 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 101:
-#line 852 "src/ast-parser.y" /* yacc.c:1646 */
+#line 825 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.elem_segment));
- (yyval.elem_segment).table_var = (yyvsp[-3].var);
- (yyval.elem_segment).offset = (yyvsp[-2].expr_list).first;
- (yyval.elem_segment).vars = (yyvsp[-1].vars);
+ (yyval.elem_segment) = new ElemSegment();
+ (yyval.elem_segment)->table_var = (yyvsp[-3].var);
+ (yyval.elem_segment)->offset = (yyvsp[-2].expr_list).first;
+ (yyval.elem_segment)->vars = std::move(*(yyvsp[-1].vars));
+ delete (yyvsp[-1].vars);
}
#line 3196 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 102:
-#line 858 "src/ast-parser.y" /* yacc.c:1646 */
+#line 832 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.elem_segment));
- (yyval.elem_segment).table_var.loc = (yylsp[-3]);
- (yyval.elem_segment).table_var.type = VarType::Index;
- (yyval.elem_segment).table_var.index = 0;
- (yyval.elem_segment).offset = (yyvsp[-2].expr_list).first;
- (yyval.elem_segment).vars = (yyvsp[-1].vars);
+ (yyval.elem_segment) = new ElemSegment();
+ (yyval.elem_segment)->table_var.loc = (yylsp[-3]);
+ (yyval.elem_segment)->table_var.type = VarType::Index;
+ (yyval.elem_segment)->table_var.index = 0;
+ (yyval.elem_segment)->offset = (yyvsp[-2].expr_list).first;
+ (yyval.elem_segment)->vars = std::move(*(yyvsp[-1].vars));
+ delete (yyvsp[-1].vars);
}
-#line 3209 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3210 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 103:
-#line 869 "src/ast-parser.y" /* yacc.c:1646 */
+#line 844 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.exported_table).table = (yyvsp[-1].table);
- (yyval.exported_table).table.name = (yyvsp[-3].text);
- (yyval.exported_table).has_elem_segment = false;
- (yyval.exported_table).export_ = (yyvsp[-2].optional_export);
+ (yyval.exported_table) = new ExportedTable();
+ (yyval.exported_table)->table.reset((yyvsp[-1].table));
+ (yyval.exported_table)->table->name = (yyvsp[-3].text);
+ (yyval.exported_table)->has_elem_segment = false;
+ (yyval.exported_table)->export_ = std::move(*(yyvsp[-2].optional_export));
+ delete (yyvsp[-2].optional_export);
}
-#line 3220 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3223 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 104:
-#line 876 "src/ast-parser.y" /* yacc.c:1646 */
+#line 853 "src/ast-parser.y" /* yacc.c:1646 */
{
- Expr* expr = new_const_expr();
+ Expr* expr = Expr::CreateConst(Const(Const::I32(), 0));
expr->loc = (yylsp[-8]);
- expr->const_.type = Type::I32;
- expr->const_.u32 = 0;
- WABT_ZERO_MEMORY((yyval.exported_table));
- (yyval.exported_table).table.name = (yyvsp[-7].text);
- (yyval.exported_table).table.elem_limits.initial = (yyvsp[-2].vars).size;
- (yyval.exported_table).table.elem_limits.max = (yyvsp[-2].vars).size;
- (yyval.exported_table).table.elem_limits.has_max = true;
- (yyval.exported_table).has_elem_segment = true;
- (yyval.exported_table).elem_segment.offset = expr;
- (yyval.exported_table).elem_segment.vars = (yyvsp[-2].vars);
- (yyval.exported_table).export_ = (yyvsp[-6].optional_export);
+ (yyval.exported_table) = new ExportedTable();
+ (yyval.exported_table)->table.reset(new Table());
+ (yyval.exported_table)->table->name = (yyvsp[-7].text);
+ (yyval.exported_table)->table->elem_limits.initial = (yyvsp[-2].vars)->size();
+ (yyval.exported_table)->table->elem_limits.max = (yyvsp[-2].vars)->size();
+ (yyval.exported_table)->table->elem_limits.has_max = true;
+ (yyval.exported_table)->has_elem_segment = true;
+ (yyval.exported_table)->elem_segment.reset(new ElemSegment());
+ (yyval.exported_table)->elem_segment->offset = expr;
+ (yyval.exported_table)->elem_segment->vars = std::move(*(yyvsp[-2].vars));
+ delete (yyvsp[-2].vars);
+ (yyval.exported_table)->export_ = std::move(*(yyvsp[-6].optional_export));
+ delete (yyvsp[-6].optional_export);
}
-#line 3241 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3246 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 105:
-#line 895 "src/ast-parser.y" /* yacc.c:1646 */
+#line 874 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.data_segment));
- (yyval.data_segment).memory_var = (yyvsp[-3].var);
- (yyval.data_segment).offset = (yyvsp[-2].expr_list).first;
- dup_text_list(&(yyvsp[-1].text_list), &(yyval.data_segment).data, &(yyval.data_segment).size);
+ (yyval.data_segment) = new DataSegment();
+ (yyval.data_segment)->memory_var = (yyvsp[-3].var);
+ (yyval.data_segment)->offset = (yyvsp[-2].expr_list).first;
+ dup_text_list(&(yyvsp[-1].text_list), &(yyval.data_segment)->data, &(yyval.data_segment)->size);
destroy_text_list(&(yyvsp[-1].text_list));
}
-#line 3253 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3258 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 106:
-#line 902 "src/ast-parser.y" /* yacc.c:1646 */
- {
- WABT_ZERO_MEMORY((yyval.data_segment));
- (yyval.data_segment).memory_var.loc = (yylsp[-3]);
- (yyval.data_segment).memory_var.type = VarType::Index;
- (yyval.data_segment).memory_var.index = 0;
- (yyval.data_segment).offset = (yyvsp[-2].expr_list).first;
- dup_text_list(&(yyvsp[-1].text_list), &(yyval.data_segment).data, &(yyval.data_segment).size);
+#line 881 "src/ast-parser.y" /* yacc.c:1646 */
+ {
+ (yyval.data_segment) = new DataSegment();
+ (yyval.data_segment)->memory_var.loc = (yylsp[-3]);
+ (yyval.data_segment)->memory_var.type = VarType::Index;
+ (yyval.data_segment)->memory_var.index = 0;
+ (yyval.data_segment)->offset = (yyvsp[-2].expr_list).first;
+ dup_text_list(&(yyvsp[-1].text_list), &(yyval.data_segment)->data, &(yyval.data_segment)->size);
destroy_text_list(&(yyvsp[-1].text_list));
}
-#line 3267 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3272 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 107:
-#line 914 "src/ast-parser.y" /* yacc.c:1646 */
+#line 893 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.exported_memory));
- (yyval.exported_memory).memory = (yyvsp[-1].memory);
- (yyval.exported_memory).memory.name = (yyvsp[-3].text);
- (yyval.exported_memory).has_data_segment = false;
- (yyval.exported_memory).export_ = (yyvsp[-2].optional_export);
+ (yyval.exported_memory) = new ExportedMemory();
+ (yyval.exported_memory)->memory.reset((yyvsp[-1].memory));
+ (yyval.exported_memory)->memory->name = (yyvsp[-3].text);
+ (yyval.exported_memory)->has_data_segment = false;
+ (yyval.exported_memory)->export_ = std::move(*(yyvsp[-2].optional_export));
+ delete (yyvsp[-2].optional_export);
}
-#line 3279 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3285 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 108:
-#line 921 "src/ast-parser.y" /* yacc.c:1646 */
+#line 901 "src/ast-parser.y" /* yacc.c:1646 */
{
- Expr* expr = new_const_expr();
+ Expr* expr = Expr::CreateConst(Const(Const::I32(), 0));
expr->loc = (yylsp[-7]);
- expr->const_.type = Type::I32;
- expr->const_.u32 = 0;
- WABT_ZERO_MEMORY((yyval.exported_memory));
- (yyval.exported_memory).has_data_segment = true;
- (yyval.exported_memory).data_segment.offset = expr;
- dup_text_list(&(yyvsp[-2].text_list), &(yyval.exported_memory).data_segment.data, &(yyval.exported_memory).data_segment.size);
+ (yyval.exported_memory) = new ExportedMemory();
+ (yyval.exported_memory)->has_data_segment = true;
+ (yyval.exported_memory)->data_segment.reset(new DataSegment());
+ (yyval.exported_memory)->data_segment->offset = expr;
+ dup_text_list(&(yyvsp[-2].text_list), &(yyval.exported_memory)->data_segment->data, &(yyval.exported_memory)->data_segment->size);
destroy_text_list(&(yyvsp[-2].text_list));
- uint32_t byte_size = WABT_ALIGN_UP_TO_PAGE((yyval.exported_memory).data_segment.size);
+ uint32_t byte_size = WABT_ALIGN_UP_TO_PAGE((yyval.exported_memory)->data_segment->size);
uint32_t page_size = WABT_BYTES_TO_PAGES(byte_size);
- (yyval.exported_memory).memory.name = (yyvsp[-6].text);
- (yyval.exported_memory).memory.page_limits.initial = page_size;
- (yyval.exported_memory).memory.page_limits.max = page_size;
- (yyval.exported_memory).memory.page_limits.has_max = true;
- (yyval.exported_memory).export_ = (yyvsp[-5].optional_export);
+ (yyval.exported_memory)->memory.reset(new Memory());
+ (yyval.exported_memory)->memory->name = (yyvsp[-6].text);
+ (yyval.exported_memory)->memory->page_limits.initial = page_size;
+ (yyval.exported_memory)->memory->page_limits.max = page_size;
+ (yyval.exported_memory)->memory->page_limits.has_max = true;
+ (yyval.exported_memory)->export_ = std::move(*(yyvsp[-5].optional_export));
+ delete (yyvsp[-5].optional_export);
}
-#line 3303 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3310 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 109:
-#line 941 "src/ast-parser.y" /* yacc.c:1646 */
+#line 922 "src/ast-parser.y" /* yacc.c:1646 */
{
- Expr* expr = new_const_expr();
+ Expr* expr = Expr::CreateConst(Const(Const::I32(), 0));
expr->loc = (yylsp[-6]);
- expr->const_.type = Type::I32;
- expr->const_.u32 = 0;
- WABT_ZERO_MEMORY((yyval.exported_memory));
- (yyval.exported_memory).has_data_segment = true;
- (yyval.exported_memory).data_segment.offset = expr;
- dup_text_list(&(yyvsp[-2].text_list), &(yyval.exported_memory).data_segment.data, &(yyval.exported_memory).data_segment.size);
+ (yyval.exported_memory) = new ExportedMemory();
+ (yyval.exported_memory)->has_data_segment = true;
+ (yyval.exported_memory)->data_segment.reset(new DataSegment());
+ (yyval.exported_memory)->data_segment->offset = expr;
+ dup_text_list(&(yyvsp[-2].text_list), &(yyval.exported_memory)->data_segment->data, &(yyval.exported_memory)->data_segment->size);
destroy_text_list(&(yyvsp[-2].text_list));
- uint32_t byte_size = WABT_ALIGN_UP_TO_PAGE((yyval.exported_memory).data_segment.size);
+ uint32_t byte_size = WABT_ALIGN_UP_TO_PAGE((yyval.exported_memory)->data_segment->size);
uint32_t page_size = WABT_BYTES_TO_PAGES(byte_size);
- (yyval.exported_memory).memory.name = (yyvsp[-5].text);
- (yyval.exported_memory).memory.page_limits.initial = page_size;
- (yyval.exported_memory).memory.page_limits.max = page_size;
- (yyval.exported_memory).memory.page_limits.has_max = true;
- (yyval.exported_memory).export_.has_export = false;
+ (yyval.exported_memory)->memory.reset(new Memory());
+ (yyval.exported_memory)->memory->name = (yyvsp[-5].text);
+ (yyval.exported_memory)->memory->page_limits.initial = page_size;
+ (yyval.exported_memory)->memory->page_limits.max = page_size;
+ (yyval.exported_memory)->memory->page_limits.has_max = true;
+ (yyval.exported_memory)->export_.has_export = false;
}
-#line 3327 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3334 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 110:
-#line 963 "src/ast-parser.y" /* yacc.c:1646 */
+#line 944 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.exported_global));
- (yyval.exported_global).global = (yyvsp[-2].global);
- (yyval.exported_global).global.name = (yyvsp[-4].text);
- (yyval.exported_global).global.init_expr = (yyvsp[-1].expr_list).first;
- (yyval.exported_global).export_ = (yyvsp[-3].optional_export);
+ (yyval.exported_global) = new ExportedGlobal();
+ (yyval.exported_global)->global.reset((yyvsp[-2].global));
+ (yyval.exported_global)->global->name = (yyvsp[-4].text);
+ (yyval.exported_global)->global->init_expr = (yyvsp[-1].expr_list).first;
+ (yyval.exported_global)->export_ = std::move(*(yyvsp[-3].optional_export));
+ delete (yyvsp[-3].optional_export);
}
-#line 3339 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3347 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 111:
-#line 970 "src/ast-parser.y" /* yacc.c:1646 */
+#line 952 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.exported_global));
- (yyval.exported_global).global = (yyvsp[-2].global);
- (yyval.exported_global).global.name = (yyvsp[-3].text);
- (yyval.exported_global).global.init_expr = (yyvsp[-1].expr_list).first;
- (yyval.exported_global).export_.has_export = false;
+ (yyval.exported_global) = new ExportedGlobal();
+ (yyval.exported_global)->global.reset((yyvsp[-2].global));
+ (yyval.exported_global)->global->name = (yyvsp[-3].text);
+ (yyval.exported_global)->global->init_expr = (yyvsp[-1].expr_list).first;
+ (yyval.exported_global)->export_.has_export = false;
}
-#line 3351 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3359 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 112:
-#line 983 "src/ast-parser.y" /* yacc.c:1646 */
+#line 965 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.import) = new_import();
+ (yyval.import) = new Import();
(yyval.import)->kind = ExternalKind::Func;
(yyval.import)->func = new Func();
(yyval.import)->func->name = (yyvsp[-2].text);
- (yyval.import)->func->decl.flags = WABT_FUNC_DECLARATION_FLAG_HAS_FUNC_TYPE;
+ (yyval.import)->func->decl.has_func_type = true;
(yyval.import)->func->decl.type_var = (yyvsp[-1].var);
}
-#line 3364 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3372 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 113:
-#line 991 "src/ast-parser.y" /* yacc.c:1646 */
+#line 973 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.import) = new_import();
+ (yyval.import) = new Import();
(yyval.import)->kind = ExternalKind::Func;
(yyval.import)->func = new Func();
(yyval.import)->func->name = (yyvsp[-2].text);
- (yyval.import)->func->decl.sig = (yyvsp[-1].func_sig);
+ (yyval.import)->func->decl.sig = std::move(*(yyvsp[-1].func_sig));
+ delete (yyvsp[-1].func_sig);
}
-#line 3376 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3385 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 114:
-#line 998 "src/ast-parser.y" /* yacc.c:1646 */
+#line 981 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.import) = new_import();
+ (yyval.import) = new Import();
(yyval.import)->kind = ExternalKind::Table;
(yyval.import)->table = (yyvsp[-1].table);
- (yyval.import)->table.name = (yyvsp[-2].text);
+ (yyval.import)->table->name = (yyvsp[-2].text);
}
-#line 3387 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3396 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 115:
-#line 1004 "src/ast-parser.y" /* yacc.c:1646 */
+#line 987 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.import) = new_import();
+ (yyval.import) = new Import();
(yyval.import)->kind = ExternalKind::Memory;
(yyval.import)->memory = (yyvsp[-1].memory);
- (yyval.import)->memory.name = (yyvsp[-2].text);
+ (yyval.import)->memory->name = (yyvsp[-2].text);
}
-#line 3398 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3407 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 116:
-#line 1010 "src/ast-parser.y" /* yacc.c:1646 */
+#line 993 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.import) = new_import();
+ (yyval.import) = new Import();
(yyval.import)->kind = ExternalKind::Global;
(yyval.import)->global = (yyvsp[-1].global);
- (yyval.import)->global.name = (yyvsp[-2].text);
+ (yyval.import)->global->name = (yyvsp[-2].text);
}
-#line 3409 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3418 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 117:
-#line 1018 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1001 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.import) = (yyvsp[-1].import);
(yyval.import)->module_name = (yyvsp[-3].text);
(yyval.import)->field_name = (yyvsp[-2].text);
}
-#line 3419 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3428 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 118:
-#line 1023 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1006 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.import) = (yyvsp[-2].import);
(yyval.import)->kind = ExternalKind::Func;
(yyval.import)->func = new Func();
(yyval.import)->func->name = (yyvsp[-3].text);
- (yyval.import)->func->decl.flags = WABT_FUNC_DECLARATION_FLAG_HAS_FUNC_TYPE;
+ (yyval.import)->func->decl.has_func_type = true;
(yyval.import)->func->decl.type_var = (yyvsp[-1].var);
}
-#line 3432 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3441 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 119:
-#line 1031 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1014 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.import) = (yyvsp[-2].import);
(yyval.import)->kind = ExternalKind::Func;
(yyval.import)->func = new Func();
(yyval.import)->func->name = (yyvsp[-3].text);
- (yyval.import)->func->decl.sig = (yyvsp[-1].func_sig);
+ (yyval.import)->func->decl.sig = std::move(*(yyvsp[-1].func_sig));
+ delete (yyvsp[-1].func_sig);
}
-#line 3444 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3454 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 120:
-#line 1038 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1022 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.import) = (yyvsp[-2].import);
(yyval.import)->kind = ExternalKind::Table;
(yyval.import)->table = (yyvsp[-1].table);
- (yyval.import)->table.name = (yyvsp[-3].text);
+ (yyval.import)->table->name = (yyvsp[-3].text);
}
-#line 3455 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3465 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 121:
-#line 1044 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1028 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.import) = (yyvsp[-2].import);
(yyval.import)->kind = ExternalKind::Memory;
(yyval.import)->memory = (yyvsp[-1].memory);
- (yyval.import)->memory.name = (yyvsp[-3].text);
+ (yyval.import)->memory->name = (yyvsp[-3].text);
}
-#line 3466 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3476 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 122:
-#line 1050 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1034 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.import) = (yyvsp[-2].import);
(yyval.import)->kind = ExternalKind::Global;
(yyval.import)->global = (yyvsp[-1].global);
- (yyval.import)->global.name = (yyvsp[-3].text);
+ (yyval.import)->global->name = (yyvsp[-3].text);
}
-#line 3477 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3487 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 123:
-#line 1059 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1043 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.import) = new_import();
+ (yyval.import) = new Import();
(yyval.import)->module_name = (yyvsp[-2].text);
(yyval.import)->field_name = (yyvsp[-1].text);
}
-#line 3487 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3497 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 124:
-#line 1067 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1051 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.export_));
- (yyval.export_).kind = ExternalKind::Func;
- (yyval.export_).var = (yyvsp[-1].var);
+ (yyval.export_) = new Export();
+ (yyval.export_)->kind = ExternalKind::Func;
+ (yyval.export_)->var = (yyvsp[-1].var);
}
-#line 3497 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3507 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 125:
-#line 1072 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1056 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.export_));
- (yyval.export_).kind = ExternalKind::Table;
- (yyval.export_).var = (yyvsp[-1].var);
+ (yyval.export_) = new Export();
+ (yyval.export_)->kind = ExternalKind::Table;
+ (yyval.export_)->var = (yyvsp[-1].var);
}
-#line 3507 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3517 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 126:
-#line 1077 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1061 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.export_));
- (yyval.export_).kind = ExternalKind::Memory;
- (yyval.export_).var = (yyvsp[-1].var);
+ (yyval.export_) = new Export();
+ (yyval.export_)->kind = ExternalKind::Memory;
+ (yyval.export_)->var = (yyvsp[-1].var);
}
-#line 3517 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3527 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 127:
-#line 1082 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1066 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.export_));
- (yyval.export_).kind = ExternalKind::Global;
- (yyval.export_).var = (yyvsp[-1].var);
+ (yyval.export_) = new Export();
+ (yyval.export_)->kind = ExternalKind::Global;
+ (yyval.export_)->var = (yyvsp[-1].var);
}
-#line 3527 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3537 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 128:
-#line 1089 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1073 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.export_) = (yyvsp[-1].export_);
- (yyval.export_).name = (yyvsp[-2].text);
+ (yyval.export_)->name = (yyvsp[-2].text);
}
-#line 3536 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3546 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 129:
-#line 1096 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1080 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.optional_export));
- (yyval.optional_export).has_export = false;
+ (yyval.optional_export) = new OptionalExport();
+ (yyval.optional_export)->has_export = false;
}
-#line 3545 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3555 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 131:
-#line 1103 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1087 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.optional_export));
- (yyval.optional_export).has_export = true;
- (yyval.optional_export).export_.name = (yyvsp[-1].text);
+ (yyval.optional_export) = new OptionalExport();
+ (yyval.optional_export)->has_export = true;
+ (yyval.optional_export)->export_.reset(new Export());
+ (yyval.optional_export)->export_->name = (yyvsp[-1].text);
}
-#line 3555 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3566 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 132:
-#line 1114 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1099 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.func_type));
- (yyval.func_type).sig = (yyvsp[-1].func_sig);
+ (yyval.func_type) = new FuncType();
+ (yyval.func_type)->sig = std::move(*(yyvsp[-1].func_sig));
+ delete (yyvsp[-1].func_sig);
}
-#line 3564 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3576 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 133:
-#line 1118 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1104 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.func_type).name = (yyvsp[-2].text);
- (yyval.func_type).sig = (yyvsp[-1].func_sig);
+ (yyval.func_type) = new FuncType();
+ (yyval.func_type)->name = (yyvsp[-2].text);
+ (yyval.func_type)->sig = std::move(*(yyvsp[-1].func_sig));
+ delete (yyvsp[-1].func_sig);
}
-#line 3573 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3587 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 134:
-#line 1125 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1113 "src/ast-parser.y" /* yacc.c:1646 */
{ (yyval.var) = (yyvsp[-1].var); }
-#line 3579 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3593 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 135:
-#line 1129 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1117 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.module) = new_module();
+ (yyval.module) = new Module();
}
-#line 3587 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3601 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 136:
-#line 1132 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1120 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.module) = (yyvsp[-1].module);
ModuleField* field;
APPEND_FIELD_TO_LIST((yyval.module), field, FuncType, func_type, (yylsp[0]), (yyvsp[0].func_type));
- APPEND_ITEM_TO_VECTOR((yyval.module), FuncType, func_type, func_types,
- &field->func_type);
- INSERT_BINDING((yyval.module), func_type, func_types, (yylsp[0]), (yyvsp[0].func_type).name);
+ APPEND_ITEM_TO_VECTOR((yyval.module), func_types, field->func_type);
+ INSERT_BINDING((yyval.module), func_type, func_types, (yylsp[0]), (yyvsp[0].func_type)->name);
}
-#line 3600 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3613 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 137:
-#line 1140 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1127 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.module) = (yyvsp[-1].module);
ModuleField* field;
- APPEND_FIELD_TO_LIST((yyval.module), field, Global, global, (yylsp[0]), (yyvsp[0].exported_global).global);
- APPEND_ITEM_TO_VECTOR((yyval.module), Global, global, globals, &field->global);
- INSERT_BINDING((yyval.module), global, globals, (yylsp[0]), (yyvsp[0].exported_global).global.name);
- APPEND_INLINE_EXPORT((yyval.module), Global, (yylsp[0]), (yyvsp[0].exported_global), (yyval.module)->globals.size - 1);
+ APPEND_FIELD_TO_LIST((yyval.module), field, Global, global, (yylsp[0]), (yyvsp[0].exported_global)->global.release());
+ APPEND_ITEM_TO_VECTOR((yyval.module), globals, field->global);
+ INSERT_BINDING((yyval.module), global, globals, (yylsp[0]), field->global->name);
+ APPEND_INLINE_EXPORT((yyval.module), Global, (yylsp[0]), (yyvsp[0].exported_global), (yyval.module)->globals.size() - 1);
+ delete (yyvsp[0].exported_global);
}
-#line 3613 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3627 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 138:
-#line 1148 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1136 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.module) = (yyvsp[-1].module);
ModuleField* field;
- APPEND_FIELD_TO_LIST((yyval.module), field, Table, table, (yylsp[0]), (yyvsp[0].exported_table).table);
- APPEND_ITEM_TO_VECTOR((yyval.module), Table, table, tables, &field->table);
- INSERT_BINDING((yyval.module), table, tables, (yylsp[0]), (yyvsp[0].exported_table).table.name);
- APPEND_INLINE_EXPORT((yyval.module), Table, (yylsp[0]), (yyvsp[0].exported_table), (yyval.module)->tables.size - 1);
+ APPEND_FIELD_TO_LIST((yyval.module), field, Table, table, (yylsp[0]), (yyvsp[0].exported_table)->table.release());
+ APPEND_ITEM_TO_VECTOR((yyval.module), tables, field->table);
+ INSERT_BINDING((yyval.module), table, tables, (yylsp[0]), field->table->name);
+ APPEND_INLINE_EXPORT((yyval.module), Table, (yylsp[0]), (yyvsp[0].exported_table), (yyval.module)->tables.size() - 1);
- if ((yyvsp[0].exported_table).has_elem_segment) {
+ if ((yyvsp[0].exported_table)->has_elem_segment) {
ModuleField* elem_segment_field;
APPEND_FIELD_TO_LIST((yyval.module), elem_segment_field, ElemSegment, elem_segment,
- (yylsp[0]), (yyvsp[0].exported_table).elem_segment);
- APPEND_ITEM_TO_VECTOR((yyval.module), ElemSegment, elem_segment, elem_segments,
- &elem_segment_field->elem_segment);
+ (yylsp[0]), (yyvsp[0].exported_table)->elem_segment.release());
+ APPEND_ITEM_TO_VECTOR((yyval.module), elem_segments,
+ elem_segment_field->elem_segment);
}
-
+ delete (yyvsp[0].exported_table);
}
-#line 3635 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3649 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 139:
-#line 1165 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1153 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.module) = (yyvsp[-1].module);
ModuleField* field;
- APPEND_FIELD_TO_LIST((yyval.module), field, Memory, memory, (yylsp[0]), (yyvsp[0].exported_memory).memory);
- APPEND_ITEM_TO_VECTOR((yyval.module), Memory, memory, memories, &field->memory);
- INSERT_BINDING((yyval.module), memory, memories, (yylsp[0]), (yyvsp[0].exported_memory).memory.name);
- APPEND_INLINE_EXPORT((yyval.module), Memory, (yylsp[0]), (yyvsp[0].exported_memory), (yyval.module)->memories.size - 1);
+ APPEND_FIELD_TO_LIST((yyval.module), field, Memory, memory, (yylsp[0]), (yyvsp[0].exported_memory)->memory.release());
+ APPEND_ITEM_TO_VECTOR((yyval.module), memories, field->memory);
+ INSERT_BINDING((yyval.module), memory, memories, (yylsp[0]), field->memory->name);
+ APPEND_INLINE_EXPORT((yyval.module), Memory, (yylsp[0]), (yyvsp[0].exported_memory), (yyval.module)->memories.size() - 1);
- if ((yyvsp[0].exported_memory).has_data_segment) {
+ if ((yyvsp[0].exported_memory)->has_data_segment) {
ModuleField* data_segment_field;
APPEND_FIELD_TO_LIST((yyval.module), data_segment_field, DataSegment, data_segment,
- (yylsp[0]), (yyvsp[0].exported_memory).data_segment);
- APPEND_ITEM_TO_VECTOR((yyval.module), DataSegment, data_segment, data_segments,
- &data_segment_field->data_segment);
+ (yylsp[0]), (yyvsp[0].exported_memory)->data_segment.release());
+ APPEND_ITEM_TO_VECTOR((yyval.module), data_segments,
+ data_segment_field->data_segment);
}
+ delete (yyvsp[0].exported_memory);
}
-#line 3656 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3671 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 140:
-#line 1181 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1170 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.module) = (yyvsp[-1].module);
ModuleField* field;
- APPEND_FIELD_TO_LIST((yyval.module), field, Func, func, (yylsp[0]), (yyvsp[0].exported_func).func);
+ APPEND_FIELD_TO_LIST((yyval.module), field, Func, func, (yylsp[0]), (yyvsp[0].exported_func)->func.release());
append_implicit_func_declaration(&(yylsp[0]), (yyval.module), &field->func->decl);
- APPEND_ITEM_TO_VECTOR((yyval.module), Func, func, funcs, field->func);
- INSERT_BINDING((yyval.module), func, funcs, (yylsp[0]), (yyvsp[0].exported_func).func->name);
- APPEND_INLINE_EXPORT((yyval.module), Func, (yylsp[0]), (yyvsp[0].exported_func), (yyval.module)->funcs.size - 1);
+ APPEND_ITEM_TO_VECTOR((yyval.module), funcs, field->func);
+ INSERT_BINDING((yyval.module), func, funcs, (yylsp[0]), field->func->name);
+ APPEND_INLINE_EXPORT((yyval.module), Func, (yylsp[0]), (yyvsp[0].exported_func), (yyval.module)->funcs.size() - 1);
+ delete (yyvsp[0].exported_func);
}
-#line 3670 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3686 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 141:
-#line 1190 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1180 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.module) = (yyvsp[-1].module);
ModuleField* field;
APPEND_FIELD_TO_LIST((yyval.module), field, ElemSegment, elem_segment, (yylsp[0]), (yyvsp[0].elem_segment));
- APPEND_ITEM_TO_VECTOR((yyval.module), ElemSegment, elem_segment, elem_segments,
- &field->elem_segment);
+ APPEND_ITEM_TO_VECTOR((yyval.module), elem_segments, field->elem_segment);
}
-#line 3682 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3697 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 142:
-#line 1197 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1186 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.module) = (yyvsp[-1].module);
ModuleField* field;
APPEND_FIELD_TO_LIST((yyval.module), field, DataSegment, data_segment, (yylsp[0]), (yyvsp[0].data_segment));
- APPEND_ITEM_TO_VECTOR((yyval.module), DataSegment, data_segment, data_segments,
- &field->data_segment);
+ APPEND_ITEM_TO_VECTOR((yyval.module), data_segments, field->data_segment);
}
-#line 3694 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3708 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 143:
-#line 1204 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1192 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.module) = (yyvsp[-1].module);
ModuleField* field;
APPEND_FIELD_TO_LIST((yyval.module), field, Start, start, (yylsp[0]), (yyvsp[0].var));
(yyval.module)->start = &field->start;
}
-#line 3705 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3719 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 144:
-#line 1210 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1198 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.module) = (yyvsp[-1].module);
ModuleField* field;
@@ -3717,292 +3731,292 @@ yyreduce:
switch ((yyvsp[0].import)->kind) {
case ExternalKind::Func:
append_implicit_func_declaration(&(yylsp[0]), (yyval.module), &field->import->func->decl);
- APPEND_ITEM_TO_VECTOR((yyval.module), Func, func, funcs, field->import->func);
+ APPEND_ITEM_TO_VECTOR((yyval.module), funcs, field->import->func);
INSERT_BINDING((yyval.module), func, funcs, (yylsp[0]), field->import->func->name);
(yyval.module)->num_func_imports++;
break;
case ExternalKind::Table:
- APPEND_ITEM_TO_VECTOR((yyval.module), Table, table, tables,
- &field->import->table);
- INSERT_BINDING((yyval.module), table, tables, (yylsp[0]), field->import->table.name);
+ APPEND_ITEM_TO_VECTOR((yyval.module), tables, field->import->table);
+ INSERT_BINDING((yyval.module), table, tables, (yylsp[0]), field->import->table->name);
(yyval.module)->num_table_imports++;
break;
case ExternalKind::Memory:
- APPEND_ITEM_TO_VECTOR((yyval.module), Memory, memory, memories,
- &field->import->memory);
- INSERT_BINDING((yyval.module), memory, memories, (yylsp[0]), field->import->memory.name);
+ APPEND_ITEM_TO_VECTOR((yyval.module), memories, field->import->memory);
+ INSERT_BINDING((yyval.module), memory, memories, (yylsp[0]), field->import->memory->name);
(yyval.module)->num_memory_imports++;
break;
case ExternalKind::Global:
- APPEND_ITEM_TO_VECTOR((yyval.module), Global, global, globals,
- &field->import->global);
- INSERT_BINDING((yyval.module), global, globals, (yylsp[0]), field->import->global.name);
+ APPEND_ITEM_TO_VECTOR((yyval.module), globals, field->import->global);
+ INSERT_BINDING((yyval.module), global, globals, (yylsp[0]), field->import->global->name);
(yyval.module)->num_global_imports++;
break;
}
- APPEND_ITEM_TO_VECTOR((yyval.module), Import, import, imports, field->import);
+ APPEND_ITEM_TO_VECTOR((yyval.module), imports, field->import);
}
-#line 3746 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3757 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 145:
-#line 1246 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1231 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.module) = (yyvsp[-1].module);
ModuleField* field;
APPEND_FIELD_TO_LIST((yyval.module), field, Export, export_, (yylsp[0]), (yyvsp[0].export_));
- APPEND_ITEM_TO_VECTOR((yyval.module), Export, export, exports, &field->export_);
- INSERT_BINDING((yyval.module), export, exports, (yylsp[0]), (yyvsp[0].export_).name);
+ APPEND_ITEM_TO_VECTOR((yyval.module), exports, field->export_);
+ INSERT_BINDING((yyval.module), export, exports, (yylsp[0]), field->export_->name);
}
-#line 3758 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3769 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 146:
-#line 1256 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1241 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.raw_module).type = RawModuleType::Text;
- (yyval.raw_module).text = (yyvsp[-1].module);
- (yyval.raw_module).text->name = (yyvsp[-2].text);
- (yyval.raw_module).text->loc = (yylsp[-3]);
+ (yyval.raw_module) = new RawModule();
+ (yyval.raw_module)->type = RawModuleType::Text;
+ (yyval.raw_module)->text = (yyvsp[-1].module);
+ (yyval.raw_module)->text->name = (yyvsp[-2].text);
+ (yyval.raw_module)->text->loc = (yylsp[-3]);
/* resolve func type variables where the signature was not specified
* explicitly */
- for (size_t i = 0; i < (yyvsp[-1].module)->funcs.size; ++i) {
- Func* func = (yyvsp[-1].module)->funcs.data[i];
+ for (Func* func: (yyvsp[-1].module)->funcs) {
if (decl_has_func_type(&func->decl) &&
is_empty_signature(&func->decl.sig)) {
FuncType* func_type =
get_func_type_by_var((yyvsp[-1].module), &func->decl.type_var);
if (func_type) {
func->decl.sig = func_type->sig;
- func->decl.flags |= WABT_FUNC_DECLARATION_FLAG_SHARED_SIGNATURE;
}
}
}
}
-#line 3784 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3794 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 147:
-#line 1277 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1261 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.raw_module).type = RawModuleType::Binary;
- (yyval.raw_module).binary.name = (yyvsp[-2].text);
- (yyval.raw_module).binary.loc = (yylsp[-3]);
- dup_text_list(&(yyvsp[-1].text_list), &(yyval.raw_module).binary.data, &(yyval.raw_module).binary.size);
+ (yyval.raw_module) = new RawModule();
+ (yyval.raw_module)->type = RawModuleType::Binary;
+ (yyval.raw_module)->binary.name = (yyvsp[-2].text);
+ (yyval.raw_module)->binary.loc = (yylsp[-3]);
+ dup_text_list(&(yyvsp[-1].text_list), &(yyval.raw_module)->binary.data, &(yyval.raw_module)->binary.size);
destroy_text_list(&(yyvsp[-1].text_list));
}
-#line 3796 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3807 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 148:
-#line 1287 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1272 "src/ast-parser.y" /* yacc.c:1646 */
{
- if ((yyvsp[0].raw_module).type == RawModuleType::Text) {
- (yyval.module) = (yyvsp[0].raw_module).text;
+ if ((yyvsp[0].raw_module)->type == RawModuleType::Text) {
+ (yyval.module) = (yyvsp[0].raw_module)->text;
+ (yyvsp[0].raw_module)->text = nullptr;
} else {
- assert((yyvsp[0].raw_module).type == RawModuleType::Binary);
- (yyval.module) = new_module();
+ assert((yyvsp[0].raw_module)->type == RawModuleType::Binary);
+ (yyval.module) = new Module();
ReadBinaryOptions options = WABT_READ_BINARY_OPTIONS_DEFAULT;
BinaryErrorCallbackData user_data;
- user_data.loc = &(yyvsp[0].raw_module).binary.loc;
+ user_data.loc = &(yyvsp[0].raw_module)->binary.loc;
user_data.lexer = lexer;
user_data.parser = parser;
BinaryErrorHandler error_handler;
error_handler.on_error = on_read_binary_error;
error_handler.user_data = &user_data;
- read_binary_ast((yyvsp[0].raw_module).binary.data, (yyvsp[0].raw_module).binary.size, &options,
- &error_handler, (yyval.module));
- delete [] (yyvsp[0].raw_module).binary.data;
- (yyval.module)->name = (yyvsp[0].raw_module).binary.name;
- (yyval.module)->loc = (yyvsp[0].raw_module).binary.loc;
+ read_binary_ast((yyvsp[0].raw_module)->binary.data, (yyvsp[0].raw_module)->binary.size, &options,
+ &error_handler, (yyval.module));
+ (yyval.module)->name = (yyvsp[0].raw_module)->binary.name;
+ (yyval.module)->loc = (yyvsp[0].raw_module)->binary.loc;
+ WABT_ZERO_MEMORY((yyvsp[0].raw_module)->binary.name);
}
+ delete (yyvsp[0].raw_module);
}
-#line 3822 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3835 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 149:
-#line 1313 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1300 "src/ast-parser.y" /* yacc.c:1646 */
{
WABT_ZERO_MEMORY((yyval.var));
(yyval.var).type = VarType::Index;
(yyval.var).index = INVALID_VAR_INDEX;
}
-#line 3832 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3845 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 150:
-#line 1318 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1305 "src/ast-parser.y" /* yacc.c:1646 */
{
WABT_ZERO_MEMORY((yyval.var));
(yyval.var).type = VarType::Name;
DUPTEXT((yyval.var).name, (yyvsp[0].text));
}
-#line 3842 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3855 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 151:
-#line 1326 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1313 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.action));
- (yyval.action).loc = (yylsp[-4]);
- (yyval.action).module_var = (yyvsp[-3].var);
- (yyval.action).type = ActionType::Invoke;
- (yyval.action).invoke.name = (yyvsp[-2].text);
- (yyval.action).invoke.args = (yyvsp[-1].consts);
+ (yyval.action) = new Action();
+ (yyval.action)->loc = (yylsp[-4]);
+ (yyval.action)->module_var = (yyvsp[-3].var);
+ (yyval.action)->type = ActionType::Invoke;
+ (yyval.action)->name = (yyvsp[-2].text);
+ (yyval.action)->invoke = new ActionInvoke();
+ (yyval.action)->invoke->args = std::move(*(yyvsp[-1].consts));
+ delete (yyvsp[-1].consts);
}
-#line 3855 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3870 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 152:
-#line 1334 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1323 "src/ast-parser.y" /* yacc.c:1646 */
{
- WABT_ZERO_MEMORY((yyval.action));
- (yyval.action).loc = (yylsp[-3]);
- (yyval.action).module_var = (yyvsp[-2].var);
- (yyval.action).type = ActionType::Get;
- (yyval.action).invoke.name = (yyvsp[-1].text);
+ (yyval.action) = new Action();
+ (yyval.action)->loc = (yylsp[-3]);
+ (yyval.action)->module_var = (yyvsp[-2].var);
+ (yyval.action)->type = ActionType::Get;
+ (yyval.action)->name = (yyvsp[-1].text);
}
-#line 3867 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3882 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 153:
-#line 1344 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1333 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.command) = new_command();
+ (yyval.command) = new Command();
(yyval.command)->type = CommandType::AssertMalformed;
(yyval.command)->assert_malformed.module = (yyvsp[-2].raw_module);
(yyval.command)->assert_malformed.text = (yyvsp[-1].text);
}
-#line 3878 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3893 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 154:
-#line 1350 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1339 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.command) = new_command();
+ (yyval.command) = new Command();
(yyval.command)->type = CommandType::AssertInvalid;
(yyval.command)->assert_invalid.module = (yyvsp[-2].raw_module);
(yyval.command)->assert_invalid.text = (yyvsp[-1].text);
}
-#line 3889 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3904 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 155:
-#line 1356 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1345 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.command) = new_command();
+ (yyval.command) = new Command();
(yyval.command)->type = CommandType::AssertUnlinkable;
(yyval.command)->assert_unlinkable.module = (yyvsp[-2].raw_module);
(yyval.command)->assert_unlinkable.text = (yyvsp[-1].text);
}
-#line 3900 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3915 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 156:
-#line 1362 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1351 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.command) = new_command();
+ (yyval.command) = new Command();
(yyval.command)->type = CommandType::AssertUninstantiable;
(yyval.command)->assert_uninstantiable.module = (yyvsp[-2].raw_module);
(yyval.command)->assert_uninstantiable.text = (yyvsp[-1].text);
}
-#line 3911 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3926 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 157:
-#line 1368 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1357 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.command) = new_command();
+ (yyval.command) = new Command();
(yyval.command)->type = CommandType::AssertReturn;
(yyval.command)->assert_return.action = (yyvsp[-2].action);
(yyval.command)->assert_return.expected = (yyvsp[-1].consts);
}
-#line 3922 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3937 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 158:
-#line 1374 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1363 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.command) = new_command();
+ (yyval.command) = new Command();
(yyval.command)->type = CommandType::AssertReturnNan;
(yyval.command)->assert_return_nan.action = (yyvsp[-1].action);
}
-#line 3932 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3947 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 159:
-#line 1379 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1368 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.command) = new_command();
+ (yyval.command) = new Command();
(yyval.command)->type = CommandType::AssertTrap;
(yyval.command)->assert_trap.action = (yyvsp[-2].action);
(yyval.command)->assert_trap.text = (yyvsp[-1].text);
}
-#line 3943 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3958 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 160:
-#line 1385 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1374 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.command) = new_command();
+ (yyval.command) = new Command();
(yyval.command)->type = CommandType::AssertExhaustion;
(yyval.command)->assert_trap.action = (yyvsp[-2].action);
(yyval.command)->assert_trap.text = (yyvsp[-1].text);
}
-#line 3954 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3969 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 161:
-#line 1394 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1383 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.command) = new_command();
+ (yyval.command) = new Command();
(yyval.command)->type = CommandType::Action;
(yyval.command)->action = (yyvsp[0].action);
}
-#line 3964 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3979 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 163:
-#line 1400 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1389 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.command) = new_command();
+ (yyval.command) = new Command();
(yyval.command)->type = CommandType::Module;
(yyval.command)->module = (yyvsp[0].module);
}
-#line 3974 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 3989 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 164:
-#line 1405 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1394 "src/ast-parser.y" /* yacc.c:1646 */
{
- (yyval.command) = new_command();
+ (yyval.command) = new Command();
(yyval.command)->type = CommandType::Register;
(yyval.command)->register_.module_name = (yyvsp[-2].text);
(yyval.command)->register_.var = (yyvsp[-1].var);
(yyval.command)->register_.var.loc = (yylsp[-1]);
}
-#line 3986 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 4001 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 165:
-#line 1414 "src/ast-parser.y" /* yacc.c:1646 */
- { WABT_ZERO_MEMORY((yyval.commands)); }
-#line 3992 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 1403 "src/ast-parser.y" /* yacc.c:1646 */
+ { (yyval.commands) = new CommandPtrVector(); }
+#line 4007 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 166:
-#line 1415 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1404 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.commands) = (yyvsp[-1].commands);
- append_command_value(&(yyval.commands), (yyvsp[0].command));
- delete (yyvsp[0].command);
+ (yyval.commands)->emplace_back((yyvsp[0].command));
}
-#line 4002 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 4016 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 167:
-#line 1423 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1411 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.const_).loc = (yylsp[-2]);
if (WABT_FAILED(parse_const((yyvsp[-2].type), (yyvsp[-1].literal).type, (yyvsp[-1].literal).text.start,
@@ -4013,40 +4027,41 @@ yyreduce:
}
delete [] (yyvsp[-1].literal).text.start;
}
-#line 4017 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 4031 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 168:
-#line 1435 "src/ast-parser.y" /* yacc.c:1646 */
- { WABT_ZERO_MEMORY((yyval.consts)); }
-#line 4023 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 1423 "src/ast-parser.y" /* yacc.c:1646 */
+ { (yyval.consts) = new ConstVector(); }
+#line 4037 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 169:
-#line 1436 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1424 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.consts) = (yyvsp[-1].consts);
- append_const_value(&(yyval.consts), &(yyvsp[0].const_));
+ (yyval.consts)->push_back((yyvsp[0].const_));
}
-#line 4032 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 4046 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
case 170:
-#line 1443 "src/ast-parser.y" /* yacc.c:1646 */
+#line 1431 "src/ast-parser.y" /* yacc.c:1646 */
{
(yyval.script) = new Script();
- (yyval.script)->commands = (yyvsp[0].commands);
+ (yyval.script)->commands = std::move(*(yyvsp[0].commands));
+ delete (yyvsp[0].commands);
int last_module_index = -1;
- for (size_t i = 0; i < (yyval.script)->commands.size; ++i) {
- Command* command = &(yyval.script)->commands.data[i];
+ for (size_t i = 0; i < (yyval.script)->commands.size(); ++i) {
+ Command& command = *(yyval.script)->commands[i].get();
Var* module_var = nullptr;
- switch (command->type) {
+ switch (command.type) {
case CommandType::Module: {
last_module_index = i;
/* Wire up module name bindings. */
- Module* module = command->module;
+ Module* module = command.module;
if (module->name.length == 0)
continue;
@@ -4056,20 +4071,20 @@ yyreduce:
}
case CommandType::AssertReturn:
- module_var = &command->assert_return.action.module_var;
+ module_var = &command.assert_return.action->module_var;
goto has_module_var;
case CommandType::AssertReturnNan:
- module_var = &command->assert_return_nan.action.module_var;
+ module_var = &command.assert_return_nan.action->module_var;
goto has_module_var;
case CommandType::AssertTrap:
case CommandType::AssertExhaustion:
- module_var = &command->assert_trap.action.module_var;
+ module_var = &command.assert_trap.action->module_var;
goto has_module_var;
case CommandType::Action:
- module_var = &command->action.module_var;
+ module_var = &command.action->module_var;
goto has_module_var;
case CommandType::Register:
- module_var = &command->register_.var;
+ module_var = &command.register_.var;
goto has_module_var;
has_module_var: {
@@ -4088,11 +4103,11 @@ yyreduce:
}
parser->script = (yyval.script);
}
-#line 4092 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 4107 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
break;
-#line 4096 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
+#line 4111 "src/prebuilt/ast-parser-gen.cc" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -4327,7 +4342,7 @@ yyreturn:
#endif
return yyresult;
}
-#line 1506 "src/ast-parser.y" /* yacc.c:1906 */
+#line 1495 "src/ast-parser.y" /* yacc.c:1906 */
void append_expr_list(ExprList* expr_list, ExprList* expr) {
@@ -4460,8 +4475,8 @@ void dup_text_list(TextList* text_list, char** out_data, size_t* out_size) {
*out_size = dest - result;
}
-bool is_empty_signature(FuncSignature* sig) {
- return sig->result_types.size == 0 && sig->param_types.size == 0;
+bool is_empty_signature(const FuncSignature* sig) {
+ return sig->result_types.empty() && sig->param_types.empty();
}
void append_implicit_func_declaration(Location* loc,
@@ -4474,13 +4489,8 @@ void append_implicit_func_declaration(Location* loc,
if (sig_index == -1) {
append_implicit_func_type(loc, module, &decl->sig);
} else {
- /* signature already exists, share that one and destroy this one */
- destroy_func_signature(&decl->sig);
- FuncSignature* sig = &module->func_types.data[sig_index]->sig;
- decl->sig = *sig;
+ decl->sig = module->func_types[sig_index]->sig;
}
-
- decl->flags |= WABT_FUNC_DECLARATION_FLAG_SHARED_SIGNATURE;
}
Result parse_ast(AstLexer* lexer, Script** out_script,