summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKarlSchimpf <karlschimpf@gmail.com>2017-06-22 07:59:09 -0700
committerGitHub <noreply@github.com>2017-06-22 07:59:09 -0700
commit917d3bfa6593c9a85c81b674770aec2ca404a4a2 (patch)
treeff279590a68c00714889d1667da9739f7e7cbd9a /src
parentc0ae2e69b53f12e57833270e1b48a01864fb5156 (diff)
downloadwabt-917d3bfa6593c9a85c81b674770aec2ca404a4a2.tar.gz
wabt-917d3bfa6593c9a85c81b674770aec2ca404a4a2.tar.bz2
wabt-917d3bfa6593c9a85c81b674770aec2ca404a4a2.zip
Fix the validator to be able to validate exception handling constructs. (#514)
* Save state. * Add exception declaration syntax. * Extend validator to handle exception declarations. * Fix binary writer to handle exception declarations. * Fix code to handle external exception kind. * Regenerate lexer. * Fix bug with last merge. * Add exception declarations, and add examples. * Fix nits. * Initial extensions for expr visitor. * Save state. * Fix issues with master merge. * Reconcile issues with merge of tools wast2wasm and wast-desugar. * Save state. * Save work to move to mtv. * Fix resolving names on try/throw constructs. * Completed implementation of validation for exception handling. * Fix nits. * Combine Catch and CatchAll in IR. * Remove tryblock visitors. * Clean up to only use one visitor for each catch. * Rework the structure of try blocks and catches. * Remove the need for common CLI options. * Fix issues raised by binji. * Fix re2c generated file. * Fix memory leak, and fix nits.
Diffstat (limited to 'src')
-rw-r--r--src/binary-writer.cc8
-rw-r--r--src/common.h4
-rw-r--r--src/expr-visitor.cc30
-rw-r--r--src/expr-visitor.h11
-rw-r--r--src/generate-names.cc9
-rw-r--r--src/ir.cc51
-rw-r--r--src/ir.h28
-rw-r--r--src/opcode.def5
-rw-r--r--src/prebuilt/wast-parser-gen.cc1266
-rw-r--r--src/prebuilt/wast-parser-gen.output34
-rw-r--r--src/resolve-names.cc41
-rw-r--r--src/tools/wast-desugar.cc9
-rw-r--r--src/tools/wast2wasm.cc2
-rw-r--r--src/type-checker.cc48
-rw-r--r--src/type-checker.h5
-rw-r--r--src/validator.cc110
-rw-r--r--src/wast-parser-lexer-shared.h1
-rw-r--r--src/wast-parser.h2
-rw-r--r--src/wast-parser.y48
19 files changed, 939 insertions, 773 deletions
diff --git a/src/binary-writer.cc b/src/binary-writer.cc
index b54eea84..6748559d 100644
--- a/src/binary-writer.cc
+++ b/src/binary-writer.cc
@@ -457,14 +457,6 @@ void BinaryWriter::WriteExpr(const Module* module,
write_u32_leb128(&stream_, 0, "call_indirect reserved");
break;
}
- case ExprType::Catch:
- // TODO(karlschimpf): Define
- WABT_FATAL("Catch: Don't know how to write\n");
- break;
- case ExprType::CatchAll:
- // TODO(karlschimpf): Define
- WABT_FATAL("CatchAll: Don't know how to write\n");
- break;
case ExprType::Compare:
write_opcode(&stream_, expr->compare.opcode);
break;
diff --git a/src/common.h b/src/common.h
index 3b4d5a54..63fde51b 100644
--- a/src/common.h
+++ b/src/common.h
@@ -125,9 +125,11 @@ enum class LabelType {
Loop,
If,
Else,
+ Try,
+ Catch,
First = Func,
- Last = Else,
+ Last = Catch,
};
static const int kLabelTypeCount = WABT_ENUM_COUNT(LabelType);
diff --git a/src/expr-visitor.cc b/src/expr-visitor.cc
index 961e91f9..db34a49b 100644
--- a/src/expr-visitor.cc
+++ b/src/expr-visitor.cc
@@ -60,16 +60,6 @@ Result ExprVisitor::VisitExpr(Expr* expr) {
CHECK_RESULT(delegate_->OnCallIndirectExpr(expr));
break;
- case ExprType::Catch:
- // TODO(karlschimpf): Define
- WABT_FATAL("Catch: don't know how to visit\n");
- return Result::Error;
-
- case ExprType::CatchAll:
- // TODO(karlschimpf): Define
- WABT_FATAL("CatchAll: don't know how to visit\n");
- return Result::Error;
-
case ExprType::Compare:
CHECK_RESULT(delegate_->OnCompareExpr(expr));
break;
@@ -125,9 +115,8 @@ Result ExprVisitor::VisitExpr(Expr* expr) {
break;
case ExprType::Rethrow:
- // TODO(karlschimpf): Define
- WABT_FATAL("Rethrow: don't know how to visit\n");
- return Result::Error;
+ CHECK_RESULT(delegate_->OnRethrowExpr(expr));
+ break;
case ExprType::Return:
CHECK_RESULT(delegate_->OnReturnExpr(expr));
@@ -154,14 +143,17 @@ Result ExprVisitor::VisitExpr(Expr* expr) {
break;
case ExprType::Throw:
- // TODO(karlschimpf): Define
- WABT_FATAL("Throw: don't know how to visit\n");
- return Result::Error;
+ CHECK_RESULT(delegate_->OnThrowExpr(expr));
+ break;
case ExprType::TryBlock:
- // TODO(karlschimpf): Define
- WABT_FATAL("TryBlock: don't know how to visit\n");
- return Result::Error;
+ CHECK_RESULT(delegate_->BeginTryExpr(expr));
+ CHECK_RESULT(VisitExprList(expr->try_block.block->first));
+ for (Catch* catch_ : *expr->try_block.catches) {
+ CHECK_RESULT(delegate_->OnCatchExpr(expr, catch_));
+ CHECK_RESULT(VisitExprList(catch_->first));
+ }
+ CHECK_RESULT(delegate_->EndTryExpr(expr));
break;
case ExprType::Unary:
diff --git a/src/expr-visitor.h b/src/expr-visitor.h
index 11103d5e..99a74ec1 100644
--- a/src/expr-visitor.h
+++ b/src/expr-visitor.h
@@ -21,6 +21,7 @@
namespace wabt {
+struct Catch;
struct Expr;
struct Func;
@@ -74,6 +75,11 @@ class ExprVisitor::Delegate {
virtual Result OnTeeLocalExpr(Expr*) = 0;
virtual Result OnUnaryExpr(Expr*) = 0;
virtual Result OnUnreachableExpr(Expr*) = 0;
+ virtual Result BeginTryExpr(Expr*) = 0;
+ virtual Result EndTryExpr(Expr*) = 0;
+ virtual Result OnCatchExpr(Expr*, Catch*) = 0;
+ virtual Result OnThrowExpr(Expr*) = 0;
+ virtual Result OnRethrowExpr(Expr*) = 0;
};
class ExprVisitor::DelegateNop : public ExprVisitor::Delegate {
@@ -109,6 +115,11 @@ class ExprVisitor::DelegateNop : public ExprVisitor::Delegate {
Result OnTeeLocalExpr(Expr*) override { return Result::Ok; }
Result OnUnaryExpr(Expr*) override { return Result::Ok; }
Result OnUnreachableExpr(Expr*) override { return Result::Ok; }
+ Result BeginTryExpr(Expr*) override { return Result::Ok; }
+ Result EndTryExpr(Expr*) override { return Result::Ok; }
+ Result OnCatchExpr(Expr*, Catch*) override { return Result::Ok; }
+ Result OnThrowExpr(Expr*) override { return Result::Ok; }
+ Result OnRethrowExpr(Expr*) override { return Result::Ok; }
};
} // namespace wabt
diff --git a/src/generate-names.cc b/src/generate-names.cc
index 258d9b05..0f1a39da 100644
--- a/src/generate-names.cc
+++ b/src/generate-names.cc
@@ -65,6 +65,7 @@ class NameGenerator : public ExprVisitor::DelegateNop {
Result VisitFuncType(Index func_type_index, FuncType* func_type);
Result VisitTable(Index table_index, Table* table);
Result VisitMemory(Index memory_index, Memory* memory);
+ Result VisitExcept(Index except_index, Exception* except);
Module* module_ = nullptr;
ExprVisitor visitor_;
@@ -191,6 +192,12 @@ Result NameGenerator::VisitMemory(Index memory_index, Memory* memory) {
return Result::Ok;
}
+Result NameGenerator::VisitExcept(Index except_index, Exception* except) {
+ MaybeGenerateAndBindName(&module_->except_bindings, "$e", except_index,
+ &except->name);
+ return Result::Ok;
+}
+
Result NameGenerator::VisitModule(Module* module) {
module_ = module;
for (Index i = 0; i < module->globals.size(); ++i)
@@ -203,6 +210,8 @@ Result NameGenerator::VisitModule(Module* module) {
CHECK_RESULT(VisitTable(i, module->tables[i]));
for (Index i = 0; i < module->memories.size(); ++i)
CHECK_RESULT(VisitMemory(i, module->memories[i]));
+ for (Index i = 0; i < module->excepts.size(); ++i)
+ CHECK_RESULT(VisitExcept(i, module->excepts[i]));
module_ = nullptr;
return Result::Ok;
}
diff --git a/src/ir.cc b/src/ir.cc
index 2e4d8b4a..715ea250 100644
--- a/src/ir.cc
+++ b/src/ir.cc
@@ -52,6 +52,10 @@ Index Module::GetFuncTypeIndex(const Var& var) const {
return func_type_bindings.FindIndex(var);
}
+Index Module::GetExceptIndex(const Var& var) const {
+ return except_bindings.FindIndex(var);
+}
+
Index Func::GetLocalIndex(const Var& var) const {
if (var.type == VarType::Index)
return var.index;
@@ -278,6 +282,25 @@ Block::~Block() {
DestroyExprList(first);
}
+Catch::Catch(Expr* first) : first(first) {
+ WABT_ZERO_MEMORY(loc);
+}
+
+Catch::Catch(Var var, Expr* first) : var(var), first(first) {
+ WABT_ZERO_MEMORY(loc);
+}
+
+Catch::~Catch() {
+ delete first;
+}
+
+void destroy_catches(CatchVector* catches) {
+ for (Catch* catch_ : *catches)
+ delete catch_;
+ delete catches;
+}
+
+
Expr::Expr() : type(ExprType::Binary), next(nullptr) {
WABT_ZERO_MEMORY(loc);
binary.opcode = Opcode::Nop;
@@ -308,11 +331,6 @@ Expr::~Expr() {
case ExprType::CallIndirect:
call_indirect.var.~Var();
break;
- case ExprType::Catch:
- case ExprType::CatchAll:
- catch_.var.~Var();
- DestroyExprList(catch_.first);
- break;
case ExprType::GetGlobal:
get_global.var.~Var();
break;
@@ -343,7 +361,7 @@ Expr::~Expr() {
break;
case ExprType::TryBlock:
delete try_block.block;
- DestroyExprList(try_block.first_catch);
+ destroy_catches(try_block.catches);
break;
case ExprType::Binary:
case ExprType::Compare:
@@ -414,21 +432,6 @@ Expr* Expr::CreateCallIndirect(Var var) {
}
// static
-Expr* Expr::CreateCatch(Var var, Expr* first) {
- Expr* expr = new Expr(ExprType::Catch);
- expr->catch_.var = var;
- expr->catch_.first = first;
- return expr;
-}
-
-// static
-Expr* Expr::CreateCatchAll(Expr* first) {
- Expr* expr = new Expr(ExprType::CatchAll);
- expr->catch_.first = first;
- return expr;
-}
-
-// static
Expr* Expr::CreateCompare(Opcode opcode) {
Expr* expr = new Expr(ExprType::Compare);
expr->compare.opcode = opcode;
@@ -562,10 +565,10 @@ Expr* Expr::CreateThrow(Var var) {
}
// static
-Expr* Expr::CreateTry(Block* block, Expr* first_catch) {
+Expr* Expr::CreateTry() {
Expr* expr = new Expr(ExprType::TryBlock);
- expr->try_block.block = block;
- expr->try_block.first_catch = first_catch;
+ expr->try_block.block = nullptr;
+ expr->try_block.catches = new CatchVector();
return expr;
}
diff --git a/src/ir.h b/src/ir.h
index 3d51c512..5bb6cb90 100644
--- a/src/ir.h
+++ b/src/ir.h
@@ -88,8 +88,6 @@ enum class ExprType {
BrTable,
Call,
CallIndirect,
- Catch,
- CatchAll,
Compare,
Const,
Convert,
@@ -130,6 +128,22 @@ struct Block {
Expr* first;
};
+struct Catch {
+ WABT_DISALLOW_COPY_AND_ASSIGN(Catch);
+ Catch() = delete;
+ explicit Catch(Expr* first);
+ Catch(Var var, Expr* first);
+ ~Catch();
+ Location loc;
+ Var var;
+ struct Expr* first;
+ bool IsCatchAll() const {
+ return var.type == VarType::Index && var.index == kInvalidIndex;
+ }
+};
+
+typedef std::vector<Catch*> CatchVector;
+
struct Expr {
WABT_DISALLOW_COPY_AND_ASSIGN(Expr);
Expr();
@@ -143,8 +157,6 @@ struct Expr {
static Expr* CreateBrTable(VarVector* targets, Var default_target);
static Expr* CreateCall(Var);
static Expr* CreateCallIndirect(Var);
- static Expr* CreateCatch(Var v, Expr* first);
- static Expr* CreateCatchAll(Expr* first);
static Expr* CreateCompare(Opcode);
static Expr* CreateConst(const Const&);
static Expr* CreateConvert(Opcode);
@@ -165,7 +177,7 @@ struct Expr {
static Expr* CreateStore(Opcode, Address align, uint32_t offset);
static Expr* CreateTeeLocal(Var);
static Expr* CreateThrow(Var);
- static Expr* CreateTry(Block* block, Expr* first_catch);
+ static Expr* CreateTry();
static Expr* CreateUnary(Opcode);
static Expr* CreateUnreachable();
@@ -175,9 +187,7 @@ struct Expr {
union {
struct { Opcode opcode; } binary, compare, convert, unary;
struct Block *block, *loop;
- struct { Block* block; Expr* first_catch; } try_block;
- struct { Var var; Expr* first; } catch_;
- struct { Expr* first; } catch_all;
+ struct { Block* block; CatchVector* catches; } try_block;
struct { Var var; } throw_, rethrow_;
struct { Var var; } br, br_if;
struct { VarVector* targets; Var default_target; } br_table;
@@ -193,6 +203,7 @@ struct Expr {
struct Exception {
StringSlice name;
TypeVector sig;
+ ~Exception() { destroy_string_slice(&name); }
};
struct FuncSignature {
@@ -401,6 +412,7 @@ struct Module {
const Global* GetGlobal(const Var&) const;
Global* GetGlobal(const Var&);
const Export* GetExport(const StringSlice&) const;
+ Index GetExceptIndex(const Var&) const;
Location loc;
StringSlice name;
diff --git a/src/opcode.def b/src/opcode.def
index 384687b8..a683c13c 100644
--- a/src/opcode.def
+++ b/src/opcode.def
@@ -36,6 +36,11 @@ WABT_OPCODE(___, ___, ___, 0, 0x02, Block, "block")
WABT_OPCODE(___, ___, ___, 0, 0x03, Loop, "loop")
WABT_OPCODE(___, ___, ___, 0, 0x04, If, "if")
WABT_OPCODE(___, ___, ___, 0, 0x05, Else, "else")
+WABT_OPCODE(___, ___, ___, 0, 0x06, Try, "try")
+WABT_OPCODE(___, ___, ___, 0, 0x07, Catch, "catch")
+WABT_OPCODE(___, ___, ___, 0, 0x08, Throw, "throw")
+WABT_OPCODE(___, ___, ___, 0, 0x09, Rethrow, "rethrow")
+WABT_OPCODE(___, ___, ___, 0, 0x0a, CatchAll, "catch_all")
WABT_OPCODE(___, ___, ___, 0, 0x0b, End, "end")
WABT_OPCODE(___, ___, ___, 0, 0x0c, Br, "br")
WABT_OPCODE(___, ___, ___, 0, 0x0d, BrIf, "br_if")
diff --git a/src/prebuilt/wast-parser-gen.cc b/src/prebuilt/wast-parser-gen.cc
index aa3055f1..5abfb8de 100644
--- a/src/prebuilt/wast-parser-gen.cc
+++ b/src/prebuilt/wast-parser-gen.cc
@@ -154,7 +154,7 @@
#define CHECK_ALLOW_EXCEPTIONS(loc, opcode_name) \
do { \
- if (!parser->options->allow_exceptions) { \
+ if (!parser->options->allow_future_exceptions) { \
wast_parser_error(loc, lexer, parser, "opcode not allowed: %s", \
opcode_name); \
} \
@@ -173,7 +173,6 @@ static bool is_power_of_two(uint32_t x) {
static ExprList join_exprs1(Location* loc, Expr* expr1);
static ExprList join_exprs2(Location* loc, ExprList* expr1, Expr* expr2);
-static ExprList join_expr_lists(ExprList* expr1, ExprList* expr2);
static void append_expr_list(ExprList* expr_list, ExprList* expr);
static Result parse_const(Type type,
@@ -211,7 +210,7 @@ class BinaryErrorHandlerModule : public BinaryErrorHandler {
#define wabt_wast_parser_error wast_parser_error
-#line 215 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:339 */
+#line 214 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:339 */
# ifndef YY_NULLPTR
# if defined __cplusplus && 201103L <= __cplusplus
@@ -366,7 +365,7 @@ int wabt_wast_parser_parse (::wabt::WastLexer* lexer, ::wabt::WastParser* parser
/* Copy the second part of user declarations. */
-#line 370 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:358 */
+#line 369 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:358 */
#ifdef short
# undef short
@@ -673,16 +672,16 @@ static const yytype_uint8 yytranslate[] =
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 265, 265, 271, 281, 282, 286, 304, 305, 311,
- 314, 319, 327, 331, 332, 337, 346, 347, 355, 361,
- 367, 372, 379, 385, 396, 400, 404, 411, 415, 423,
- 424, 431, 432, 435, 439, 440, 444, 445, 461, 462,
- 477, 478, 479, 483, 486, 489, 492, 495, 499, 503,
- 507, 510, 514, 518, 522, 526, 530, 534, 538, 541,
- 544, 557, 560, 563, 566, 569, 572, 575, 579, 586,
- 591, 596, 601, 607, 615, 618, 623, 630, 637, 644,
- 645, 649, 650, 656, 660, 663, 668, 673, 679, 687,
- 693, 701, 704, 718, 719, 727, 735, 738, 742, 746,
+ 0, 264, 264, 270, 280, 281, 285, 303, 304, 310,
+ 313, 318, 326, 330, 331, 336, 345, 346, 354, 360,
+ 366, 371, 378, 384, 395, 399, 403, 410, 414, 422,
+ 423, 430, 431, 434, 438, 439, 443, 444, 460, 461,
+ 476, 477, 478, 482, 485, 488, 491, 494, 498, 502,
+ 506, 509, 513, 517, 521, 525, 529, 533, 537, 540,
+ 543, 556, 559, 562, 565, 568, 571, 574, 578, 585,
+ 590, 595, 600, 606, 615, 618, 623, 630, 637, 644,
+ 645, 649, 653, 660, 664, 667, 672, 677, 683, 691,
+ 697, 706, 709, 715, 719, 727, 735, 738, 742, 746,
750, 754, 758, 765, 770, 776, 782, 783, 791, 792,
800, 805, 813, 822, 836, 844, 849, 860, 868, 879,
886, 887, 893, 903, 904, 913, 920, 921, 927, 937,
@@ -772,52 +771,52 @@ static const yytype_int16 yypact[] =
{
20, 948, -400, -400, -400, -400, -400, -400, -400, -400,
-400, -400, -400, -400, -400, 55, -400, -400, -400, -400,
- -400, -400, 77, -400, 105, 106, 118, 164, 106, 106,
- 129, 106, 129, 131, 131, 106, 106, 131, 147, 147,
- 165, 165, 165, 183, 183, 183, 193, 183, 100, -400,
- 240, -400, -400, -400, 463, -400, -400, -400, -400, 166,
- 142, 204, 212, 34, 152, 412, 214, -400, -400, 50,
- 214, 257, -400, 131, 219, -400, 51, 147, -400, 131,
- 131, 177, 131, 131, 131, -40, -400, 242, 252, 157,
- 131, 131, 131, 366, -400, -400, 106, 106, 106, 118,
- 118, -400, -400, -400, -400, 118, 118, -400, 118, 118,
- 118, 118, 118, 220, 220, 253, -400, -400, -400, -400,
- -400, -400, -400, -400, 502, 541, -400, -400, -400, 118,
- 118, 106, -400, 271, -400, -400, -400, -400, -400, 285,
- 463, -400, 291, -400, 292, 49, -400, 541, 298, 121,
- 34, 185, -400, 302, -400, 297, 323, 325, 323, 152,
- 106, 106, 106, 541, 327, 328, 106, -400, 233, 170,
- -400, -400, 329, 323, 50, 257, -400, 330, 331, 333,
- 117, 335, 167, 257, 257, 336, 55, 339, -400, 340,
- 344, 345, 346, 279, -400, -400, 347, 349, 353, 118,
- 106, -400, 106, 131, 131, -400, 580, 580, 580, -400,
- -400, 118, -400, -400, -400, -400, -400, -400, -400, -400,
- 289, 289, -400, -400, -400, -400, 697, -400, 947, -400,
- -400, -400, 580, -400, 231, 355, -400, -400, -400, -400,
- 237, 359, -400, -400, 360, -400, -400, -400, 361, -400,
- -400, 299, -400, -400, -400, -400, -400, 580, 368, 580,
- 370, 327, -400, -400, 580, 236, -400, -400, 257, -400,
- -400, -400, 378, -400, -400, 148, -400, 380, 118, 118,
- 118, 118, 118, -400, -400, -400, 189, 223, -400, -400,
- 295, -400, -400, -400, -400, 342, -400, -400, -400, -400,
- -400, 387, 180, 362, 181, 191, 382, 131, 391, 868,
- 580, 392, -400, 24, 402, 238, -400, -400, -400, 275,
- 106, -400, 266, -400, 106, -400, -400, 403, -400, -400,
- 828, 368, 393, -400, -400, -400, -400, -400, 580, -400,
- 294, -400, 415, -400, 106, 106, 106, 106, -400, 420,
- 424, 433, 434, 437, -400, -400, -400, 253, -400, 502,
- 438, 619, 658, 449, 450, -400, -400, -400, 106, 106,
- 106, 106, 118, 541, -400, -400, 275, 448, 200, 455,
- 201, 208, 457, 215, -400, 248, 541, -400, 908, 327,
- -400, 465, 466, -400, 294, -400, 467, 121, 323, 323,
- -400, -400, -400, -400, -400, 468, -400, 502, 742, -400,
- 787, -400, 658, -400, 216, -400, -400, 541, -400, 541,
- -400, -400, 106, 355, 469, 471, 291, 475, 478, -400,
- 484, 541, -400, 446, 456, -400, 235, 485, 488, 489,
- 500, 514, -400, -400, -400, -400, 504, -400, -400, -400,
- 355, 472, -400, -400, 291, 476, -400, 518, 523, 527,
- 539, -400, -400, -400, -400, -400, 106, -400, -400, 538,
- 556, -400, -400, -400, 541, 547, 563, 541, -400, 566,
+ -400, -400, 77, -400, 105, 106, 238, 129, 106, 106,
+ 168, 106, 168, 141, 141, 106, 106, 141, 147, 147,
+ 167, 167, 167, 193, 193, 193, 205, 193, 100, -400,
+ 240, -400, -400, -400, 463, -400, -400, -400, -400, 211,
+ 165, 220, 226, 34, 152, 412, 241, -400, -400, 50,
+ 241, 253, -400, 141, 246, -400, 51, 147, -400, 141,
+ 141, 198, 141, 141, 141, -40, -400, 271, 278, 160,
+ 141, 141, 141, 366, -400, -400, 106, 106, 106, 238,
+ 238, -400, -400, -400, -400, 238, 238, -400, 238, 238,
+ 238, 238, 238, 249, 249, 282, -400, -400, -400, -400,
+ -400, -400, -400, -400, 502, 541, -400, -400, -400, 238,
+ 238, 106, -400, 290, -400, -400, -400, -400, -400, 293,
+ 463, -400, 302, -400, 304, 49, -400, 541, 319, 121,
+ 34, 103, -400, 324, -400, 320, 325, 328, 325, 152,
+ 106, 106, 106, 541, 330, 331, 106, -400, 233, 221,
+ -400, -400, 332, 325, 50, 253, -400, 335, 334, 336,
+ 117, 340, 135, 253, 253, 344, 55, 345, -400, 346,
+ 347, 349, 353, 190, -400, -400, 354, 355, 359, 238,
+ 106, -400, 106, 141, 141, -400, 580, 580, 580, -400,
+ -400, 238, -400, -400, -400, -400, -400, -400, -400, -400,
+ 298, 298, -400, -400, -400, -400, 697, -400, 947, -400,
+ -400, -400, 580, -400, 237, 367, -400, -400, -400, -400,
+ 179, 368, -400, -400, 361, -400, -400, -400, 362, -400,
+ -400, 313, -400, -400, -400, -400, -400, 580, 379, 580,
+ 380, 330, -400, -400, 580, 236, -400, -400, 253, -400,
+ -400, -400, 381, -400, -400, 148, -400, 387, 238, 238,
+ 238, 238, 238, -400, -400, -400, 119, 242, -400, -400,
+ 255, -400, -400, -400, -400, 352, -400, -400, -400, -400,
+ -400, 388, 187, 386, 191, 200, 397, 141, 404, 868,
+ 580, 402, -400, 24, 403, 251, -400, -400, -400, 276,
+ 106, -400, 266, -400, 106, -400, -400, 420, -400, -400,
+ 828, 379, 425, -400, -400, -400, -400, -400, 580, -400,
+ 296, -400, 433, -400, 106, 106, 106, 106, -400, 434,
+ 437, 438, 449, 450, -400, -400, -400, 282, -400, 502,
+ 460, 619, 658, 461, 464, -400, -400, -400, 106, 106,
+ 106, 106, 238, 541, -400, -400, -400, 118, 201, 457,
+ 208, 215, 459, 216, -400, 248, 541, -400, 908, 330,
+ -400, 467, 468, -400, 296, -400, 469, 121, 325, 325,
+ -400, -400, -400, -400, -400, 470, -400, 502, 742, -400,
+ 787, -400, 658, -400, 218, -400, -400, 541, -400, 541,
+ -400, 106, -400, 367, 475, 478, 302, 484, 479, -400,
+ 485, 541, -400, 448, 466, -400, 244, 489, 500, 514,
+ 516, 517, -400, -400, -400, -400, 511, -400, -400, -400,
+ 367, 472, -400, -400, 302, 476, -400, 528, 539, 553,
+ 555, -400, -400, -400, -400, -400, 106, -400, -400, 547,
+ 557, -400, -400, -400, 541, 548, 566, 541, -400, 567,
-400
};
@@ -868,7 +867,7 @@ static const yytype_uint8 yydefact[] =
89, 0, 0, 93, 90, 150, 16, 0, 0, 0,
163, 166, 164, 165, 167, 0, 127, 106, 0, 130,
0, 133, 106, 162, 0, 69, 71, 106, 70, 106,
- 78, 82, 34, 123, 0, 123, 16, 0, 16, 143,
+ 78, 34, 82, 123, 0, 123, 16, 0, 16, 143,
0, 106, 101, 0, 0, 94, 0, 0, 0, 0,
0, 0, 212, 128, 134, 74, 0, 77, 73, 121,
123, 0, 124, 14, 16, 0, 17, 98, 0, 0,
@@ -880,15 +879,15 @@ static const yytype_uint8 yydefact[] =
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -400, 143, -159, -1, -174, 405, -143, 509, -381, 154,
- -150, -160, -62, -134, -52, 239, -12, -92, 31, 21,
- -97, 491, 377, -400, -54, -400, -190, -131, 173, 175,
- -400, 245, -28, -400, 261, 241, -400, 306, -400, -400,
- -400, -46, -122, 383, 447, 459, -400, -400, 505, 413,
- -399, 224, 536, -337, 313, -400, -341, 63, -400, -400,
- 517, -400, -400, 503, -400, 533, -400, -400, -34, -400,
- -400, 39, -400, -400, -5, -400, 608, -400, -400, 53,
- 103, 234, -400, 665, -400, -400, 511, -400, -400
+ -400, 145, -159, -1, -174, 427, -143, 534, -381, 170,
+ -150, -160, -62, -134, -52, 252, -12, -92, 31, 21,
+ -97, 491, 378, -400, -54, -400, -190, -131, 173, 176,
+ 258, -400, -28, -400, 283, 243, -400, 307, -400, -400,
+ -400, -46, -122, 383, 482, 481, -400, -400, 508, 414,
+ -399, 259, 550, -337, 315, -400, -341, 63, -400, -400,
+ 518, -400, -400, 509, -400, 537, -400, -400, -34, -400,
+ -400, 39, -400, -400, -5, -400, 612, -400, -400, 53,
+ 144, 234, -400, 677, -400, -400, 512, -400, -400
};
/* YYDEFGOTO[NTERM-NUM]. */
@@ -922,65 +921,65 @@ static const yytype_int16 yytable[] =
197, 198, 80, 212, 213, 71, 214, 215, 216, 217,
218, 319, 150, 159, 253, 52, 156, 156, 174, 342,
312, 171, 171, 203, 204, 53, 149, 230, 231, 183,
- 184, 156, 156, 56, 248, 158, 329, 57, 335, 167,
- 187, 146, 65, 175, 56, 312, 261, 312, 57, 72,
- 173, 331, 340, 82, 83, 84, 378, 380, 338, 90,
+ 184, 156, 156, 354, 248, 158, 329, 273, 335, 167,
+ 187, 146, 60, 175, 421, 312, 261, 312, 53, 284,
+ 173, 331, 340, 372, 373, 285, 378, 380, 338, 72,
381, 383, 25, 26, 27, 151, 78, 56, 28, 29,
- 30, 31, 32, 152, 33, 34, 35, 60, 81, 278,
- 141, 284, 164, 53, 164, 279, 280, 285, 281, 367,
- 166, 49, 166, 282, 359, 361, 85, 301, 312, 150,
- 285, 285, 414, 354, 142, 362, 89, 273, 159, 315,
- 344, 285, 307, 308, 423, 425, 345, 346, 143, 347,
- 285, 285, 426, 174, 35, 60, 340, 65, 285, 428,
- 445, 303, 180, 306, 36, 285, 285, 355, 38, 39,
- 332, 273, 268, 261, 203, 204, 385, 266, 56, 441,
- 341, 56, 57, -30, 36, 57, 194, -30, 440, 203,
- 204, 420, 429, 56, 439, 164, 195, 57, 222, 223,
- 224, 219, 438, 166, 430, 176, 349, 350, 351, 352,
- 353, 415, 416, 417, 418, 233, 164, 86, 87, 88,
- 91, 92, 295, 296, 166, 199, 320, 321, 234, 199,
- 324, 325, 324, 325, 240, 446, 243, 447, 295, 356,
- 372, 373, 247, 332, 389, 251, 364, 36, 152, 458,
+ 30, 31, 32, 152, 33, 34, 35, 203, 204, 278,
+ 81, 65, 164, 56, 164, 279, 280, 57, 281, 367,
+ 166, 49, 166, 282, 82, 83, 84, 301, 312, 150,
+ 90, 359, 414, 295, 296, 361, 85, 285, 159, 315,
+ 344, 285, 307, 308, 362, 423, 345, 346, 89, 347,
+ 285, 285, 425, 174, 35, 141, 340, 142, 285, 426,
+ 428, 303, 445, 306, 143, 285, 285, 36, 285, 60,
+ 332, 38, 39, 261, 324, 325, 385, 266, 56, 441,
+ 341, 56, 57, 56, 65, 57, 355, 57, 440, 180,
+ 273, 420, 429, 56, 439, 164, -30, 57, 295, 356,
+ -30, 176, 438, 166, 430, 36, 349, 350, 351, 352,
+ 353, 415, 416, 417, 418, 194, 164, 86, 87, 88,
+ 91, 92, 195, 268, 166, 203, 204, 222, 223, 224,
+ 219, 199, 320, 321, 233, 446, 234, 447, 199, 324,
+ 325, 372, 373, 332, 389, 240, 364, 36, 243, 458,
37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 47, 320, 321, 391, 392, 448, 286, 287, 56, 254,
- 228, 316, 263, 269, 164, 274, 275, 171, 273, 283,
- 288, 379, 166, 289, 291, 382, 156, 156, 292, 293,
- 294, 298, 476, 299, 164, 479, 164, 300, 322, 328,
- 419, 432, 166, 326, 166, 55, 55, 55, 55, 473,
- 327, 330, 360, 244, 336, 396, 397, 398, 399, 94,
- 95, 160, 343, 161, 348, 357, 162, 99, 100, 101,
- 102, 358, 363, 103, 104, 365, 388, 105, 106, 107,
- 108, 109, 110, 111, 112, 113, 114, 384, 368, 115,
- 116, 117, 118, 119, 120, 121, 122, 123, 371, 395,
- 199, 200, 201, 202, 400, 94, 95, 160, 401, 161,
- 203, 204, 162, 99, 100, 101, 102, 402, 403, 103,
- 104, 404, 407, 105, 106, 107, 108, 109, 110, 111,
- 112, 113, 114, 412, 413, 115, 116, 117, 118, 119,
- 120, 121, 122, 123, 422, 424, 93, 427, 433, 434,
- 436, 372, 442, 450, 451, 163, 94, 95, 96, 454,
- 97, 455, 373, 98, 99, 100, 101, 102, 457, 461,
- 103, 104, 462, 463, 105, 106, 107, 108, 109, 110,
- 111, 112, 113, 114, 464, 226, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 94, 95, 96, 465, 97,
- 466, 469, 98, 99, 100, 101, 102, 470, 321, 103,
- 104, 471, 325, 105, 106, 107, 108, 109, 110, 111,
- 112, 113, 114, 472, 228, 115, 116, 117, 118, 119,
- 120, 121, 122, 123, 94, 95, 96, 474, 97, 475,
- 252, 98, 99, 100, 101, 102, 477, 478, 103, 104,
- 480, 144, 105, 106, 107, 108, 109, 110, 111, 112,
- 113, 114, 456, 309, 115, 116, 117, 118, 119, 120,
- 121, 122, 123, 94, 95, 96, 405, 97, 318, 390,
- 98, 99, 100, 101, 102, 221, 459, 103, 104, 460,
- 260, 105, 106, 107, 108, 109, 110, 111, 112, 113,
- 114, 421, 408, 115, 116, 117, 118, 119, 120, 121,
- 122, 123, 94, 95, 96, 435, 97, 387, 276, 98,
- 99, 100, 101, 102, 337, 239, 103, 104, 323, 452,
+ 47, 320, 321, 247, 448, 391, 392, 251, 286, 287,
+ 56, 152, 254, 228, 164, 263, 269, 171, 274, 275,
+ 316, 379, 166, 273, 283, 382, 156, 156, 288, 289,
+ 291, 292, 476, 293, 164, 479, 164, 294, 298, 299,
+ 419, 432, 166, 300, 166, 55, 55, 55, 55, 473,
+ 322, 327, 326, 328, 244, 396, 397, 398, 399, 94,
+ 95, 160, 330, 161, 336, 343, 162, 99, 100, 101,
+ 102, 348, 358, 103, 104, 357, 360, 105, 106, 107,
+ 108, 109, 110, 111, 112, 113, 114, 363, 365, 115,
+ 116, 117, 118, 119, 120, 121, 122, 123, 368, 371,
+ 199, 200, 201, 202, 384, 94, 95, 160, 388, 161,
+ 203, 204, 162, 99, 100, 101, 102, 395, 400, 103,
+ 104, 401, 402, 105, 106, 107, 108, 109, 110, 111,
+ 112, 113, 114, 403, 404, 115, 116, 117, 118, 119,
+ 120, 121, 122, 123, 407, 412, 93, 424, 413, 427,
+ 433, 434, 436, 372, 442, 163, 94, 95, 96, 450,
+ 97, 451, 455, 98, 99, 100, 101, 102, 454, 457,
+ 103, 104, 373, 461, 105, 106, 107, 108, 109, 110,
+ 111, 112, 113, 114, 462, 226, 115, 116, 117, 118,
+ 119, 120, 121, 122, 123, 94, 95, 96, 463, 97,
+ 464, 465, 98, 99, 100, 101, 102, 466, 321, 103,
+ 104, 469, 325, 105, 106, 107, 108, 109, 110, 111,
+ 112, 113, 114, 470, 228, 115, 116, 117, 118, 119,
+ 120, 121, 122, 123, 94, 95, 96, 471, 97, 472,
+ 475, 98, 99, 100, 101, 102, 474, 477, 103, 104,
+ 478, 480, 105, 106, 107, 108, 109, 110, 111, 112,
+ 113, 114, 252, 309, 115, 116, 117, 118, 119, 120,
+ 121, 122, 123, 94, 95, 96, 144, 97, 456, 318,
+ 98, 99, 100, 101, 102, 221, 459, 103, 104, 405,
+ 460, 105, 106, 107, 108, 109, 110, 111, 112, 113,
+ 114, 390, 408, 115, 116, 117, 118, 119, 120, 121,
+ 122, 123, 94, 95, 96, 422, 97, 435, 387, 98,
+ 99, 100, 101, 102, 337, 260, 103, 104, 239, 323,
105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
- 227, 410, 115, 116, 117, 118, 119, 120, 121, 122,
- 123, 94, 95, 96, 409, 97, 256, 271, 98, 99,
- 100, 101, 102, 250, 186, 103, 104, 51, 0, 105,
- 106, 107, 108, 109, 110, 111, 112, 113, 114, 290,
- 0, 115, 116, 117, 118, 119, 120, 121, 122, 123,
+ 276, 410, 115, 116, 117, 118, 119, 120, 121, 122,
+ 123, 94, 95, 96, 227, 97, 409, 256, 98, 99,
+ 100, 101, 102, 271, 452, 103, 104, 250, 186, 105,
+ 106, 107, 108, 109, 110, 111, 112, 113, 114, 51,
+ 290, 115, 116, 117, 118, 119, 120, 121, 122, 123,
94, 95, 160, 0, 161, 0, 0, 162, 99, 100,
101, 102, 0, 0, 103, 104, 0, 0, 105, 106,
107, 108, 109, 110, 111, 112, 113, 114, 0, 0,
@@ -1029,65 +1028,65 @@ static const yytype_int16 yycheck[] =
91, 92, 39, 105, 106, 32, 108, 109, 110, 111,
112, 232, 63, 64, 156, 0, 158, 159, 69, 268,
232, 173, 174, 64, 65, 9, 150, 129, 130, 68,
- 69, 173, 174, 5, 3, 159, 257, 9, 259, 66,
- 77, 10, 3, 70, 5, 257, 164, 259, 9, 8,
- 174, 331, 264, 40, 41, 42, 320, 321, 338, 46,
+ 69, 173, 174, 4, 3, 159, 257, 8, 259, 66,
+ 77, 10, 3, 70, 16, 257, 164, 259, 9, 4,
+ 174, 331, 264, 25, 26, 10, 320, 321, 338, 8,
324, 325, 52, 53, 54, 3, 9, 5, 58, 59,
- 60, 61, 62, 11, 64, 65, 66, 3, 3, 52,
- 4, 4, 226, 9, 228, 58, 59, 10, 61, 310,
- 226, 186, 228, 66, 4, 4, 3, 199, 310, 150,
- 10, 10, 366, 4, 52, 4, 3, 8, 159, 211,
- 52, 10, 203, 204, 4, 4, 58, 59, 4, 61,
- 10, 10, 4, 174, 66, 3, 338, 3, 10, 4,
- 4, 200, 3, 202, 67, 10, 10, 4, 71, 72,
- 258, 8, 62, 261, 64, 65, 328, 4, 5, 399,
- 4, 5, 9, 5, 67, 9, 4, 9, 398, 64,
- 65, 373, 4, 5, 397, 309, 4, 9, 5, 6,
- 7, 41, 396, 309, 386, 8, 278, 279, 280, 281,
+ 60, 61, 62, 11, 64, 65, 66, 64, 65, 52,
+ 3, 3, 226, 5, 228, 58, 59, 9, 61, 310,
+ 226, 186, 228, 66, 40, 41, 42, 199, 310, 150,
+ 46, 4, 366, 3, 4, 4, 3, 10, 159, 211,
+ 52, 10, 203, 204, 4, 4, 58, 59, 3, 61,
+ 10, 10, 4, 174, 66, 4, 338, 52, 10, 4,
+ 4, 200, 4, 202, 4, 10, 10, 67, 10, 3,
+ 258, 71, 72, 261, 55, 56, 328, 4, 5, 399,
+ 4, 5, 9, 5, 3, 9, 4, 9, 398, 3,
+ 8, 373, 4, 5, 397, 309, 5, 9, 3, 4,
+ 9, 8, 396, 309, 386, 67, 278, 279, 280, 281,
282, 368, 369, 370, 371, 4, 330, 43, 44, 45,
- 46, 47, 3, 4, 330, 54, 55, 56, 3, 54,
- 55, 56, 55, 56, 3, 417, 4, 419, 3, 4,
- 25, 26, 4, 331, 332, 3, 307, 67, 11, 431,
+ 46, 47, 4, 62, 330, 64, 65, 5, 6, 7,
+ 41, 54, 55, 56, 4, 417, 3, 419, 54, 55,
+ 56, 25, 26, 331, 332, 3, 307, 67, 4, 431,
70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
- 80, 55, 56, 29, 30, 422, 183, 184, 5, 4,
- 3, 42, 4, 4, 388, 4, 3, 399, 8, 4,
- 4, 320, 388, 4, 4, 324, 398, 399, 4, 4,
- 4, 4, 474, 4, 408, 477, 410, 4, 3, 60,
+ 80, 55, 56, 4, 421, 29, 30, 3, 183, 184,
+ 5, 11, 4, 3, 388, 4, 4, 399, 4, 3,
+ 42, 320, 388, 8, 4, 324, 398, 399, 4, 4,
+ 4, 4, 474, 4, 408, 477, 410, 4, 4, 4,
372, 389, 408, 4, 410, 344, 345, 346, 347, 466,
- 10, 3, 10, 12, 4, 344, 345, 346, 347, 13,
- 14, 15, 4, 17, 4, 43, 20, 21, 22, 23,
- 24, 4, 10, 27, 28, 4, 3, 31, 32, 33,
- 34, 35, 36, 37, 38, 39, 40, 4, 16, 43,
- 44, 45, 46, 47, 48, 49, 50, 51, 16, 4,
- 54, 55, 56, 57, 4, 13, 14, 15, 4, 17,
+ 3, 10, 4, 60, 12, 344, 345, 346, 347, 13,
+ 14, 15, 3, 17, 4, 4, 20, 21, 22, 23,
+ 24, 4, 4, 27, 28, 43, 10, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 10, 4, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 16, 16,
+ 54, 55, 56, 57, 4, 13, 14, 15, 3, 17,
64, 65, 20, 21, 22, 23, 24, 4, 4, 27,
28, 4, 4, 31, 32, 33, 34, 35, 36, 37,
38, 39, 40, 4, 4, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 16, 10, 3, 10, 3, 3,
- 3, 25, 4, 4, 3, 63, 13, 14, 15, 4,
- 17, 3, 26, 20, 21, 22, 23, 24, 4, 4,
- 27, 28, 4, 4, 31, 32, 33, 34, 35, 36,
+ 48, 49, 50, 51, 4, 4, 3, 10, 4, 10,
+ 3, 3, 3, 25, 4, 63, 13, 14, 15, 4,
+ 17, 3, 3, 20, 21, 22, 23, 24, 4, 4,
+ 27, 28, 26, 4, 31, 32, 33, 34, 35, 36,
37, 38, 39, 40, 4, 3, 43, 44, 45, 46,
47, 48, 49, 50, 51, 13, 14, 15, 4, 17,
- 16, 3, 20, 21, 22, 23, 24, 4, 56, 27,
- 28, 4, 56, 31, 32, 33, 34, 35, 36, 37,
+ 4, 4, 20, 21, 22, 23, 24, 16, 56, 27,
+ 28, 3, 56, 31, 32, 33, 34, 35, 36, 37,
38, 39, 40, 4, 3, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 13, 14, 15, 19, 17, 3,
- 155, 20, 21, 22, 23, 24, 19, 4, 27, 28,
- 4, 62, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 428, 3, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 13, 14, 15, 357, 17, 221, 338,
- 20, 21, 22, 23, 24, 114, 433, 27, 28, 434,
- 163, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 376, 3, 43, 44, 45, 46, 47, 48, 49,
- 50, 51, 13, 14, 15, 394, 17, 331, 179, 20,
- 21, 22, 23, 24, 261, 140, 27, 28, 235, 425,
+ 48, 49, 50, 51, 13, 14, 15, 4, 17, 4,
+ 3, 20, 21, 22, 23, 24, 19, 19, 27, 28,
+ 4, 4, 31, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 155, 3, 43, 44, 45, 46, 47, 48,
+ 49, 50, 51, 13, 14, 15, 62, 17, 428, 221,
+ 20, 21, 22, 23, 24, 114, 433, 27, 28, 357,
+ 434, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 338, 3, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 13, 14, 15, 377, 17, 394, 331, 20,
+ 21, 22, 23, 24, 261, 163, 27, 28, 140, 235,
31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 124, 3, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 13, 14, 15, 361, 17, 159, 174, 20, 21,
- 22, 23, 24, 150, 76, 27, 28, 22, -1, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 188,
- -1, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 179, 3, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 13, 14, 15, 124, 17, 361, 159, 20, 21,
+ 22, 23, 24, 174, 425, 27, 28, 150, 76, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 22,
+ 188, 43, 44, 45, 46, 47, 48, 49, 50, 51,
13, 14, 15, -1, 17, -1, -1, 20, 21, 22,
23, 24, -1, -1, 27, 28, -1, -1, 31, 32,
33, 34, 35, 36, 37, 38, 39, 40, -1, -1,
@@ -1168,7 +1167,7 @@ static const yytype_uint8 yystos[] =
116, 29, 30, 117, 118, 4, 100, 100, 100, 100,
4, 4, 4, 4, 4, 97, 135, 4, 3, 136,
3, 138, 4, 4, 86, 102, 102, 102, 102, 98,
- 124, 113, 16, 4, 10, 4, 4, 10, 4, 4,
+ 124, 16, 112, 4, 10, 4, 4, 10, 4, 4,
124, 18, 114, 3, 3, 117, 3, 90, 95, 88,
92, 93, 4, 135, 138, 4, 124, 124, 102, 132,
4, 3, 133, 90, 4, 3, 91, 4, 124, 110,
@@ -1725,459 +1724,435 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
switch (yytype)
{
case 5: /* NAT */
-#line 229 "src/wast-parser.y" /* yacc.c:1257 */
+#line 228 "src/wast-parser.y" /* yacc.c:1257 */
{}
-#line 1731 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1730 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 6: /* INT */
-#line 229 "src/wast-parser.y" /* yacc.c:1257 */
+#line 228 "src/wast-parser.y" /* yacc.c:1257 */
{}
-#line 1737 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1736 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 7: /* FLOAT */
-#line 229 "src/wast-parser.y" /* yacc.c:1257 */
+#line 228 "src/wast-parser.y" /* yacc.c:1257 */
{}
-#line 1743 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1742 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 8: /* TEXT */
-#line 229 "src/wast-parser.y" /* yacc.c:1257 */
+#line 228 "src/wast-parser.y" /* yacc.c:1257 */
{}
-#line 1749 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1748 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 9: /* VAR */
-#line 229 "src/wast-parser.y" /* yacc.c:1257 */
+#line 228 "src/wast-parser.y" /* yacc.c:1257 */
{}
-#line 1755 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1754 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 41: /* OFFSET_EQ_NAT */
-#line 229 "src/wast-parser.y" /* yacc.c:1257 */
+#line 228 "src/wast-parser.y" /* yacc.c:1257 */
{}
-#line 1761 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1760 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 42: /* ALIGN_EQ_NAT */
-#line 229 "src/wast-parser.y" /* yacc.c:1257 */
+#line 228 "src/wast-parser.y" /* yacc.c:1257 */
{}
-#line 1767 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1766 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 83: /* text_list */
-#line 249 "src/wast-parser.y" /* yacc.c:1257 */
+#line 248 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_text_list(&((*yyvaluep).text_list)); }
-#line 1773 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1772 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 84: /* text_list_opt */
-#line 249 "src/wast-parser.y" /* yacc.c:1257 */
+#line 248 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_text_list(&((*yyvaluep).text_list)); }
-#line 1779 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1778 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 85: /* quoted_text */
-#line 230 "src/wast-parser.y" /* yacc.c:1257 */
+#line 229 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_string_slice(&((*yyvaluep).text)); }
-#line 1785 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1784 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 86: /* value_type_list */
-#line 250 "src/wast-parser.y" /* yacc.c:1257 */
+#line 249 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).types); }
-#line 1791 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1790 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 88: /* global_type */
-#line 243 "src/wast-parser.y" /* yacc.c:1257 */
+#line 242 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).global); }
-#line 1797 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1796 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 89: /* func_type */
-#line 242 "src/wast-parser.y" /* yacc.c:1257 */
+#line 241 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func_sig); }
-#line 1803 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1802 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 90: /* func_sig */
-#line 242 "src/wast-parser.y" /* yacc.c:1257 */
+#line 241 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func_sig); }
-#line 1809 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1808 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 91: /* func_sig_result */
-#line 242 "src/wast-parser.y" /* yacc.c:1257 */
+#line 241 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func_sig); }
-#line 1815 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1814 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 93: /* memory_sig */
-#line 245 "src/wast-parser.y" /* yacc.c:1257 */
+#line 244 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).memory); }
-#line 1821 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1820 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 95: /* type_use */
-#line 251 "src/wast-parser.y" /* yacc.c:1257 */
+#line 250 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).var); }
-#line 1827 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1826 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 97: /* literal */
-#line 231 "src/wast-parser.y" /* yacc.c:1257 */
+#line 230 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_string_slice(&((*yyvaluep).literal).text); }
-#line 1833 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1832 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 98: /* var */
-#line 251 "src/wast-parser.y" /* yacc.c:1257 */
+#line 250 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).var); }
-#line 1839 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1838 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 99: /* var_list */
-#line 252 "src/wast-parser.y" /* yacc.c:1257 */
+#line 251 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).vars); }
-#line 1845 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1844 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 100: /* bind_var_opt */
-#line 230 "src/wast-parser.y" /* yacc.c:1257 */
+#line 229 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_string_slice(&((*yyvaluep).text)); }
-#line 1851 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1850 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 101: /* bind_var */
-#line 230 "src/wast-parser.y" /* yacc.c:1257 */
+#line 229 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_string_slice(&((*yyvaluep).text)); }
-#line 1857 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1856 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 102: /* labeling_opt */
-#line 230 "src/wast-parser.y" /* yacc.c:1257 */
+#line 229 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_string_slice(&((*yyvaluep).text)); }
-#line 1863 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1862 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 105: /* instr */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
+#line 238 "src/wast-parser.y" /* yacc.c:1257 */
{ DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 1869 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1868 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 106: /* plain_instr */
-#line 238 "src/wast-parser.y" /* yacc.c:1257 */
+#line 237 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).expr); }
-#line 1875 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1874 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 107: /* block_instr */
-#line 238 "src/wast-parser.y" /* yacc.c:1257 */
+#line 237 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).expr); }
-#line 1881 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1880 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 108: /* block_sig */
-#line 250 "src/wast-parser.y" /* yacc.c:1257 */
+#line 249 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).types); }
-#line 1887 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1886 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 109: /* block */
-#line 233 "src/wast-parser.y" /* yacc.c:1257 */
+#line 232 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).block); }
-#line 1893 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
- break;
-
- case 110: /* plain_catch */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
- { DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 1899 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
- break;
-
- case 111: /* plain_catch_all */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
- { DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 1905 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
- break;
-
- case 112: /* catch_instr */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
- { DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 1911 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1892 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 113: /* catch_instr_list */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
- { DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 1917 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 237 "src/wast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).expr); }
+#line 1898 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 114: /* expr */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
+#line 238 "src/wast-parser.y" /* yacc.c:1257 */
{ DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 1923 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1904 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 115: /* expr1 */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
+#line 238 "src/wast-parser.y" /* yacc.c:1257 */
{ DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 1929 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1910 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 116: /* try_ */
-#line 238 "src/wast-parser.y" /* yacc.c:1257 */
+#line 237 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).expr); }
-#line 1935 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
- break;
-
- case 117: /* catch_sexp */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
- { DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 1941 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1916 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 118: /* catch_sexp_list */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
- { DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 1947 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 237 "src/wast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).expr); }
+#line 1922 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 119: /* if_block */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
+#line 238 "src/wast-parser.y" /* yacc.c:1257 */
{ DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 1953 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1928 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 120: /* if_ */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
+#line 238 "src/wast-parser.y" /* yacc.c:1257 */
{ DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 1959 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1934 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 124: /* instr_list */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
+#line 238 "src/wast-parser.y" /* yacc.c:1257 */
{ DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 1965 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1940 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 125: /* expr_list */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
+#line 238 "src/wast-parser.y" /* yacc.c:1257 */
{ DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 1971 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1946 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 126: /* const_expr */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
+#line 238 "src/wast-parser.y" /* yacc.c:1257 */
{ DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 1977 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1952 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 129: /* func */
-#line 240 "src/wast-parser.y" /* yacc.c:1257 */
+#line 239 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_module_field_list(&((*yyvaluep).module_fields)); }
-#line 1983 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1958 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 130: /* func_fields */
-#line 240 "src/wast-parser.y" /* yacc.c:1257 */
+#line 239 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_module_field_list(&((*yyvaluep).module_fields)); }
-#line 1989 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1964 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 131: /* func_fields_import */
-#line 241 "src/wast-parser.y" /* yacc.c:1257 */
+#line 240 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func); }
-#line 1995 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1970 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 132: /* func_fields_import1 */
-#line 241 "src/wast-parser.y" /* yacc.c:1257 */
+#line 240 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func); }
-#line 2001 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1976 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 133: /* func_fields_import_result */
-#line 241 "src/wast-parser.y" /* yacc.c:1257 */
+#line 240 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func); }
-#line 2007 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1982 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 134: /* func_fields_body */
-#line 241 "src/wast-parser.y" /* yacc.c:1257 */
+#line 240 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func); }
-#line 2013 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1988 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 135: /* func_fields_body1 */
-#line 241 "src/wast-parser.y" /* yacc.c:1257 */
+#line 240 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func); }
-#line 2019 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1994 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 136: /* func_result_body */
-#line 241 "src/wast-parser.y" /* yacc.c:1257 */
+#line 240 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func); }
-#line 2025 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2000 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 137: /* func_body */
-#line 241 "src/wast-parser.y" /* yacc.c:1257 */
+#line 240 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func); }
-#line 2031 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2006 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 138: /* func_body1 */
-#line 241 "src/wast-parser.y" /* yacc.c:1257 */
+#line 240 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func); }
-#line 2037 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2012 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 139: /* offset */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
+#line 238 "src/wast-parser.y" /* yacc.c:1257 */
{ DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 2043 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2018 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 141: /* table */
-#line 240 "src/wast-parser.y" /* yacc.c:1257 */
+#line 239 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_module_field_list(&((*yyvaluep).module_fields)); }
-#line 2049 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2024 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 142: /* table_fields */
-#line 240 "src/wast-parser.y" /* yacc.c:1257 */
+#line 239 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_module_field_list(&((*yyvaluep).module_fields)); }
-#line 2055 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2030 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 144: /* memory */
-#line 240 "src/wast-parser.y" /* yacc.c:1257 */
+#line 239 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_module_field_list(&((*yyvaluep).module_fields)); }
-#line 2061 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2036 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 145: /* memory_fields */
-#line 240 "src/wast-parser.y" /* yacc.c:1257 */
+#line 239 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_module_field_list(&((*yyvaluep).module_fields)); }
-#line 2067 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2042 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 146: /* global */
-#line 240 "src/wast-parser.y" /* yacc.c:1257 */
+#line 239 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_module_field_list(&((*yyvaluep).module_fields)); }
-#line 2073 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2048 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 147: /* global_fields */
-#line 240 "src/wast-parser.y" /* yacc.c:1257 */
+#line 239 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_module_field_list(&((*yyvaluep).module_fields)); }
-#line 2079 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2054 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 148: /* import_desc */
-#line 244 "src/wast-parser.y" /* yacc.c:1257 */
+#line 243 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).import); }
-#line 2085 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2060 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 150: /* inline_import */
-#line 244 "src/wast-parser.y" /* yacc.c:1257 */
+#line 243 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).import); }
-#line 2091 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2066 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 151: /* export_desc */
-#line 237 "src/wast-parser.y" /* yacc.c:1257 */
+#line 236 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).export_); }
-#line 2097 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2072 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 153: /* inline_export */
-#line 237 "src/wast-parser.y" /* yacc.c:1257 */
+#line 236 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).export_); }
-#line 2103 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2078 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 156: /* module_field */
-#line 240 "src/wast-parser.y" /* yacc.c:1257 */
+#line 239 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_module_field_list(&((*yyvaluep).module_fields)); }
-#line 2109 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2084 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 157: /* module_fields_opt */
-#line 246 "src/wast-parser.y" /* yacc.c:1257 */
+#line 245 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).module); }
-#line 2115 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2090 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 158: /* module_fields */
-#line 246 "src/wast-parser.y" /* yacc.c:1257 */
+#line 245 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).module); }
-#line 2121 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2096 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 159: /* module */
-#line 246 "src/wast-parser.y" /* yacc.c:1257 */
+#line 245 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).module); }
-#line 2127 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2102 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 160: /* inline_module */
-#line 246 "src/wast-parser.y" /* yacc.c:1257 */
+#line 245 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).module); }
-#line 2133 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2108 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 161: /* script_var_opt */
-#line 251 "src/wast-parser.y" /* yacc.c:1257 */
+#line 250 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).var); }
-#line 2139 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2114 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 162: /* script_module */
-#line 247 "src/wast-parser.y" /* yacc.c:1257 */
+#line 246 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).script_module); }
-#line 2145 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2120 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 163: /* action */
-#line 232 "src/wast-parser.y" /* yacc.c:1257 */
+#line 231 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).action); }
-#line 2151 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2126 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 164: /* assertion */
-#line 234 "src/wast-parser.y" /* yacc.c:1257 */
+#line 233 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).command); }
-#line 2157 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2132 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 165: /* cmd */
-#line 234 "src/wast-parser.y" /* yacc.c:1257 */
+#line 233 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).command); }
-#line 2163 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2138 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 166: /* cmd_list */
-#line 235 "src/wast-parser.y" /* yacc.c:1257 */
+#line 234 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).commands); }
-#line 2169 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2144 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 168: /* const_list */
-#line 236 "src/wast-parser.y" /* yacc.c:1257 */
+#line 235 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).consts); }
-#line 2175 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2150 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 169: /* script */
-#line 248 "src/wast-parser.y" /* yacc.c:1257 */
+#line 247 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).script); }
-#line 2181 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2156 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
@@ -2469,18 +2444,18 @@ yyreduce:
switch (yyn)
{
case 2:
-#line 265 "src/wast-parser.y" /* yacc.c:1646 */
+#line 264 "src/wast-parser.y" /* yacc.c:1646 */
{
TextListNode* node = new TextListNode();
DUPTEXT(node->text, (yyvsp[0].text));
node->next = nullptr;
(yyval.text_list).first = (yyval.text_list).last = node;
}
-#line 2480 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2455 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 3:
-#line 271 "src/wast-parser.y" /* yacc.c:1646 */
+#line 270 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.text_list) = (yyvsp[-1].text_list);
TextListNode* node = new TextListNode();
@@ -2489,17 +2464,17 @@ yyreduce:
(yyval.text_list).last->next = node;
(yyval.text_list).last = node;
}
-#line 2493 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2468 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 4:
-#line 281 "src/wast-parser.y" /* yacc.c:1646 */
+#line 280 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.text_list).first = (yyval.text_list).last = nullptr; }
-#line 2499 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2474 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 6:
-#line 286 "src/wast-parser.y" /* yacc.c:1646 */
+#line 285 "src/wast-parser.y" /* yacc.c:1646 */
{
TextListNode node;
node.text = (yyvsp[0].text);
@@ -2513,139 +2488,139 @@ yyreduce:
(yyval.text).start = data;
(yyval.text).length = size;
}
-#line 2517 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2492 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 7:
-#line 304 "src/wast-parser.y" /* yacc.c:1646 */
+#line 303 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.types) = new TypeVector(); }
-#line 2523 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2498 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 8:
-#line 305 "src/wast-parser.y" /* yacc.c:1646 */
+#line 304 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.types) = (yyvsp[-1].types);
(yyval.types)->push_back((yyvsp[0].type));
}
-#line 2532 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2507 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 9:
-#line 311 "src/wast-parser.y" /* yacc.c:1646 */
+#line 310 "src/wast-parser.y" /* yacc.c:1646 */
{}
-#line 2538 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2513 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 10:
-#line 314 "src/wast-parser.y" /* yacc.c:1646 */
+#line 313 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.global) = new Global();
(yyval.global)->type = (yyvsp[0].type);
(yyval.global)->mutable_ = false;
}
-#line 2548 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2523 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 11:
-#line 319 "src/wast-parser.y" /* yacc.c:1646 */
+#line 318 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.global) = new Global();
(yyval.global)->type = (yyvsp[-1].type);
(yyval.global)->mutable_ = true;
}
-#line 2558 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2533 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 12:
-#line 327 "src/wast-parser.y" /* yacc.c:1646 */
+#line 326 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.func_sig) = (yyvsp[-1].func_sig); }
-#line 2564 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2539 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 14:
-#line 332 "src/wast-parser.y" /* yacc.c:1646 */
+#line 331 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func_sig) = (yyvsp[0].func_sig);
(yyval.func_sig)->param_types.insert((yyval.func_sig)->param_types.begin(), (yyvsp[-2].types)->begin(), (yyvsp[-2].types)->end());
delete (yyvsp[-2].types);
}
-#line 2574 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2549 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 15:
-#line 337 "src/wast-parser.y" /* yacc.c:1646 */
+#line 336 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func_sig) = (yyvsp[0].func_sig);
(yyval.func_sig)->param_types.insert((yyval.func_sig)->param_types.begin(), (yyvsp[-2].type));
// Ignore bind_var.
destroy_string_slice(&(yyvsp[-3].text));
}
-#line 2585 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2560 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 16:
-#line 346 "src/wast-parser.y" /* yacc.c:1646 */
+#line 345 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.func_sig) = new FuncSignature(); }
-#line 2591 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2566 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 17:
-#line 347 "src/wast-parser.y" /* yacc.c:1646 */
+#line 346 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func_sig) = (yyvsp[0].func_sig);
(yyval.func_sig)->result_types.insert((yyval.func_sig)->result_types.begin(), (yyvsp[-2].types)->begin(), (yyvsp[-2].types)->end());
delete (yyvsp[-2].types);
}
-#line 2601 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2576 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 18:
-#line 355 "src/wast-parser.y" /* yacc.c:1646 */
+#line 354 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.table) = new Table();
(yyval.table)->elem_limits = (yyvsp[-1].limits);
}
-#line 2610 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2585 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 19:
-#line 361 "src/wast-parser.y" /* yacc.c:1646 */
+#line 360 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.memory) = new Memory();
(yyval.memory)->page_limits = (yyvsp[0].limits);
}
-#line 2619 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2594 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 20:
-#line 367 "src/wast-parser.y" /* yacc.c:1646 */
+#line 366 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.limits).has_max = false;
(yyval.limits).initial = (yyvsp[0].u64);
(yyval.limits).max = 0;
}
-#line 2629 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2604 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 21:
-#line 372 "src/wast-parser.y" /* yacc.c:1646 */
+#line 371 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.limits).has_max = true;
(yyval.limits).initial = (yyvsp[-1].u64);
(yyval.limits).max = (yyvsp[0].u64);
}
-#line 2639 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2614 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 22:
-#line 379 "src/wast-parser.y" /* yacc.c:1646 */
+#line 378 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.var) = (yyvsp[-1].var); }
-#line 2645 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2620 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 23:
-#line 385 "src/wast-parser.y" /* yacc.c:1646 */
+#line 384 "src/wast-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)))) {
@@ -2654,98 +2629,98 @@ yyreduce:
WABT_PRINTF_STRING_SLICE_ARG((yyvsp[0].literal).text));
}
}
-#line 2658 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2633 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 24:
-#line 396 "src/wast-parser.y" /* yacc.c:1646 */
+#line 395 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.literal).type = (yyvsp[0].literal).type;
DUPTEXT((yyval.literal).text, (yyvsp[0].literal).text);
}
-#line 2667 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2642 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 25:
-#line 400 "src/wast-parser.y" /* yacc.c:1646 */
+#line 399 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.literal).type = (yyvsp[0].literal).type;
DUPTEXT((yyval.literal).text, (yyvsp[0].literal).text);
}
-#line 2676 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2651 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 26:
-#line 404 "src/wast-parser.y" /* yacc.c:1646 */
+#line 403 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.literal).type = (yyvsp[0].literal).type;
DUPTEXT((yyval.literal).text, (yyvsp[0].literal).text);
}
-#line 2685 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2660 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 27:
-#line 411 "src/wast-parser.y" /* yacc.c:1646 */
+#line 410 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.var) = new Var((yyvsp[0].u64));
(yyval.var)->loc = (yylsp[0]);
}
-#line 2694 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2669 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 28:
-#line 415 "src/wast-parser.y" /* yacc.c:1646 */
+#line 414 "src/wast-parser.y" /* yacc.c:1646 */
{
StringSlice name;
DUPTEXT(name, (yyvsp[0].text));
(yyval.var) = new Var(name);
(yyval.var)->loc = (yylsp[0]);
}
-#line 2705 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2680 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 29:
-#line 423 "src/wast-parser.y" /* yacc.c:1646 */
+#line 422 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.vars) = new VarVector(); }
-#line 2711 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2686 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 30:
-#line 424 "src/wast-parser.y" /* yacc.c:1646 */
+#line 423 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.vars) = (yyvsp[-1].vars);
(yyval.vars)->emplace_back(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2721 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2696 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 31:
-#line 431 "src/wast-parser.y" /* yacc.c:1646 */
+#line 430 "src/wast-parser.y" /* yacc.c:1646 */
{ WABT_ZERO_MEMORY((yyval.text)); }
-#line 2727 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2702 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 33:
-#line 435 "src/wast-parser.y" /* yacc.c:1646 */
+#line 434 "src/wast-parser.y" /* yacc.c:1646 */
{ DUPTEXT((yyval.text), (yyvsp[0].text)); }
-#line 2733 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2708 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 34:
-#line 439 "src/wast-parser.y" /* yacc.c:1646 */
+#line 438 "src/wast-parser.y" /* yacc.c:1646 */
{ WABT_ZERO_MEMORY((yyval.text)); }
-#line 2739 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2714 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 36:
-#line 444 "src/wast-parser.y" /* yacc.c:1646 */
+#line 443 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.u64) = 0; }
-#line 2745 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2720 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 37:
-#line 445 "src/wast-parser.y" /* yacc.c:1646 */
+#line 444 "src/wast-parser.y" /* yacc.c:1646 */
{
uint64_t offset64;
if (WABT_FAILED(parse_int64((yyvsp[0].text).start, (yyvsp[0].text).start + (yyvsp[0].text).length, &offset64,
@@ -2760,17 +2735,17 @@ yyreduce:
}
(yyval.u64) = static_cast<uint32_t>(offset64);
}
-#line 2764 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2739 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 38:
-#line 461 "src/wast-parser.y" /* yacc.c:1646 */
+#line 460 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.u32) = USE_NATURAL_ALIGNMENT; }
-#line 2770 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2745 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 39:
-#line 462 "src/wast-parser.y" /* yacc.c:1646 */
+#line 461 "src/wast-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))) {
@@ -2783,169 +2758,169 @@ yyreduce:
wast_parser_error(&(yylsp[0]), lexer, parser, "alignment must be power-of-two");
}
}
-#line 2787 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2762 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 40:
-#line 477 "src/wast-parser.y" /* yacc.c:1646 */
+#line 476 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.expr_list) = join_exprs1(&(yylsp[0]), (yyvsp[0].expr)); }
-#line 2793 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2768 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 41:
-#line 478 "src/wast-parser.y" /* yacc.c:1646 */
+#line 477 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.expr_list) = join_exprs1(&(yylsp[0]), (yyvsp[0].expr)); }
-#line 2799 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2774 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 43:
-#line 483 "src/wast-parser.y" /* yacc.c:1646 */
+#line 482 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateUnreachable();
}
-#line 2807 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2782 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 44:
-#line 486 "src/wast-parser.y" /* yacc.c:1646 */
+#line 485 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateNop();
}
-#line 2815 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2790 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 45:
-#line 489 "src/wast-parser.y" /* yacc.c:1646 */
+#line 488 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateDrop();
}
-#line 2823 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2798 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 46:
-#line 492 "src/wast-parser.y" /* yacc.c:1646 */
+#line 491 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateSelect();
}
-#line 2831 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2806 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 47:
-#line 495 "src/wast-parser.y" /* yacc.c:1646 */
+#line 494 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateBr(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2840 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2815 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 48:
-#line 499 "src/wast-parser.y" /* yacc.c:1646 */
+#line 498 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateBrIf(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2849 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2824 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 49:
-#line 503 "src/wast-parser.y" /* yacc.c:1646 */
+#line 502 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateBrTable((yyvsp[-1].vars), std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2858 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2833 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 50:
-#line 507 "src/wast-parser.y" /* yacc.c:1646 */
+#line 506 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateReturn();
}
-#line 2866 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2841 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 51:
-#line 510 "src/wast-parser.y" /* yacc.c:1646 */
+#line 509 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateCall(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2875 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2850 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 52:
-#line 514 "src/wast-parser.y" /* yacc.c:1646 */
+#line 513 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateCallIndirect(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2884 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2859 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 53:
-#line 518 "src/wast-parser.y" /* yacc.c:1646 */
+#line 517 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateGetLocal(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2893 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2868 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 54:
-#line 522 "src/wast-parser.y" /* yacc.c:1646 */
+#line 521 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateSetLocal(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2902 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2877 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 55:
-#line 526 "src/wast-parser.y" /* yacc.c:1646 */
+#line 525 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateTeeLocal(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2911 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2886 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 56:
-#line 530 "src/wast-parser.y" /* yacc.c:1646 */
+#line 529 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateGetGlobal(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2920 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2895 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 57:
-#line 534 "src/wast-parser.y" /* yacc.c:1646 */
+#line 533 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateSetGlobal(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2929 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2904 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 58:
-#line 538 "src/wast-parser.y" /* yacc.c:1646 */
+#line 537 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateLoad((yyvsp[-2].opcode), (yyvsp[0].u32), (yyvsp[-1].u64));
}
-#line 2937 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2912 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 59:
-#line 541 "src/wast-parser.y" /* yacc.c:1646 */
+#line 540 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateStore((yyvsp[-2].opcode), (yyvsp[0].u32), (yyvsp[-1].u64));
}
-#line 2945 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2920 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 60:
-#line 544 "src/wast-parser.y" /* yacc.c:1646 */
+#line 543 "src/wast-parser.y" /* yacc.c:1646 */
{
Const const_;
WABT_ZERO_MEMORY(const_);
@@ -2959,130 +2934,131 @@ yyreduce:
delete [] (yyvsp[0].literal).text.start;
(yyval.expr) = Expr::CreateConst(const_);
}
-#line 2963 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2938 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 61:
-#line 557 "src/wast-parser.y" /* yacc.c:1646 */
+#line 556 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateUnary((yyvsp[0].opcode));
}
-#line 2971 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2946 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 62:
-#line 560 "src/wast-parser.y" /* yacc.c:1646 */
+#line 559 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateBinary((yyvsp[0].opcode));
}
-#line 2979 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2954 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 63:
-#line 563 "src/wast-parser.y" /* yacc.c:1646 */
+#line 562 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateCompare((yyvsp[0].opcode));
}
-#line 2987 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2962 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 64:
-#line 566 "src/wast-parser.y" /* yacc.c:1646 */
+#line 565 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateConvert((yyvsp[0].opcode));
}
-#line 2995 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2970 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 65:
-#line 569 "src/wast-parser.y" /* yacc.c:1646 */
+#line 568 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateCurrentMemory();
}
-#line 3003 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2978 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 66:
-#line 572 "src/wast-parser.y" /* yacc.c:1646 */
+#line 571 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateGrowMemory();
}
-#line 3011 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2986 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 67:
-#line 575 "src/wast-parser.y" /* yacc.c:1646 */
+#line 574 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateThrow(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 3020 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2995 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 68:
-#line 579 "src/wast-parser.y" /* yacc.c:1646 */
+#line 578 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = Expr::CreateRethrow(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 3029 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3004 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 69:
-#line 586 "src/wast-parser.y" /* yacc.c:1646 */
+#line 585 "src/wast-parser.y" /* yacc.c:1646 */
{
(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 3039 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3014 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 70:
-#line 591 "src/wast-parser.y" /* yacc.c:1646 */
+#line 590 "src/wast-parser.y" /* yacc.c:1646 */
{
(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 3049 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3024 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 71:
-#line 596 "src/wast-parser.y" /* yacc.c:1646 */
+#line 595 "src/wast-parser.y" /* yacc.c:1646 */
{
(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 3059 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3034 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 72:
-#line 601 "src/wast-parser.y" /* yacc.c:1646 */
+#line 600 "src/wast-parser.y" /* yacc.c:1646 */
{
(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 3070 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3045 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 73:
-#line 607 "src/wast-parser.y" /* yacc.c:1646 */
+#line 606 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyvsp[-3].block)->label = (yyvsp[-4].text);
- (yyval.expr) = Expr::CreateTry((yyvsp[-3].block), (yyvsp[-2].expr_list).first);
+ (yyval.expr) = (yyvsp[-2].expr);
+ (yyval.expr)->try_block.block = (yyvsp[-3].block);
CHECK_END_LABEL((yylsp[0]), (yyvsp[-3].block)->label, (yyvsp[0].text));
}
-#line 3080 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3056 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 74:
#line 615 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.types) = (yyvsp[-1].types); }
-#line 3086 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3062 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 75:
@@ -3092,7 +3068,7 @@ yyreduce:
(yyval.block)->sig.insert((yyval.block)->sig.end(), (yyvsp[-1].types)->begin(), (yyvsp[-1].types)->end());
delete (yyvsp[-1].types);
}
-#line 3096 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3072 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 76:
@@ -3101,135 +3077,155 @@ yyreduce:
(yyval.block) = new Block();
(yyval.block)->first = (yyvsp[0].expr_list).first;
}
-#line 3105 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3081 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 77:
#line 630 "src/wast-parser.y" /* yacc.c:1646 */
{
- Expr* expr = Expr::CreateCatch(std::move(*(yyvsp[-1].var)), (yyvsp[0].expr_list).first);
+ (yyval.catch_) = new Catch(std::move(*(yyvsp[-1].var)), (yyvsp[0].expr_list).first);
+ (yyval.catch_)->loc = (yylsp[-2]);
delete (yyvsp[-1].var);
- (yyval.expr_list) = join_exprs1(&(yylsp[-2]), expr);
}
-#line 3115 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3091 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 78:
#line 637 "src/wast-parser.y" /* yacc.c:1646 */
{
- Expr* expr = Expr::CreateCatchAll((yyvsp[0].expr_list).first);
- (yyval.expr_list) = join_exprs1(&(yylsp[-1]), expr);
+ (yyval.catch_) = new Catch((yyvsp[0].expr_list).first);
+ (yyval.catch_)->loc = (yylsp[-1]);
}
-#line 3124 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3100 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+ break;
+
+ case 81:
+#line 649 "src/wast-parser.y" /* yacc.c:1646 */
+ {
+ (yyval.expr) = Expr::CreateTry();
+ (yyval.expr)->try_block.catches->push_back((yyvsp[0].catch_));
+ }
+#line 3109 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 82:
-#line 650 "src/wast-parser.y" /* yacc.c:1646 */
+#line 653 "src/wast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr_list) = join_expr_lists(&(yyvsp[-1].expr_list), &(yyvsp[0].expr_list));
+ (yyval.expr) = (yyvsp[-1].expr);
+ (yyval.expr)->try_block.catches->push_back((yyvsp[0].catch_));
}
-#line 3132 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3118 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 83:
-#line 656 "src/wast-parser.y" /* yacc.c:1646 */
+#line 660 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.expr_list) = (yyvsp[-1].expr_list); }
-#line 3138 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3124 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 84:
-#line 660 "src/wast-parser.y" /* yacc.c:1646 */
+#line 664 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr_list) = join_exprs2(&(yylsp[-1]), &(yyvsp[0].expr_list), (yyvsp[-1].expr));
}
-#line 3146 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3132 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 85:
-#line 663 "src/wast-parser.y" /* yacc.c:1646 */
+#line 667 "src/wast-parser.y" /* yacc.c:1646 */
{
Expr* expr = Expr::CreateBlock((yyvsp[0].block));
expr->block->label = (yyvsp[-1].text);
(yyval.expr_list) = join_exprs1(&(yylsp[-2]), expr);
}
-#line 3156 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3142 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 86:
-#line 668 "src/wast-parser.y" /* yacc.c:1646 */
+#line 672 "src/wast-parser.y" /* yacc.c:1646 */
{
Expr* expr = Expr::CreateLoop((yyvsp[0].block));
expr->loop->label = (yyvsp[-1].text);
(yyval.expr_list) = join_exprs1(&(yylsp[-2]), expr);
}
-#line 3166 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3152 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 87:
-#line 673 "src/wast-parser.y" /* yacc.c:1646 */
+#line 677 "src/wast-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[-1].text);
}
-#line 3177 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3163 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 88:
-#line 679 "src/wast-parser.y" /* yacc.c:1646 */
+#line 683 "src/wast-parser.y" /* yacc.c:1646 */
{
Block* block = (yyvsp[0].expr)->try_block.block;
block->label = (yyvsp[-1].text);
(yyval.expr_list) = join_exprs1(&(yylsp[-2]), (yyvsp[0].expr));
}
-#line 3187 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3173 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 89:
-#line 687 "src/wast-parser.y" /* yacc.c:1646 */
+#line 691 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = (yyvsp[0].expr);
Block* block = (yyval.expr)->try_block.block;
block->sig.insert(block->sig.end(), (yyvsp[-1].types)->begin(), (yyvsp[-1].types)->end());
delete (yyvsp[-1].types);
}
-#line 3198 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3184 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 90:
-#line 693 "src/wast-parser.y" /* yacc.c:1646 */
+#line 697 "src/wast-parser.y" /* yacc.c:1646 */
{
Block* block = new Block();
block->first = (yyvsp[-1].expr_list).first;
- (yyval.expr) = Expr::CreateTry(block, (yyvsp[0].expr_list).first);
+ (yyval.expr) = (yyvsp[0].expr);
+ (yyval.expr)->try_block.block = block;
}
-#line 3208 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3195 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 91:
-#line 701 "src/wast-parser.y" /* yacc.c:1646 */
+#line 706 "src/wast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr_list) = (yyvsp[-1].expr_list);
+ (yyval.catch_) = (yyvsp[-1].catch_);
}
-#line 3216 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3203 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 92:
-#line 704 "src/wast-parser.y" /* yacc.c:1646 */
+#line 709 "src/wast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr_list) = (yyvsp[-1].expr_list);
+ (yyval.catch_) = (yyvsp[-1].catch_);
}
-#line 3224 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3211 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+ break;
+
+ case 93:
+#line 715 "src/wast-parser.y" /* yacc.c:1646 */
+ {
+ (yyval.expr) = Expr::CreateTry();
+ (yyval.expr)->try_block.catches->push_back((yyvsp[0].catch_));
+ }
+#line 3220 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 94:
#line 719 "src/wast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr_list) = (yyvsp[-1].expr_list);
- append_expr_list(&(yyvsp[-1].expr_list), &(yyvsp[0].expr_list));
+ (yyval.expr) = (yyvsp[-1].expr);
+ (yyval.expr)->try_block.catches->push_back((yyvsp[0].catch_));
}
-#line 3233 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3229 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 95:
@@ -3242,7 +3238,7 @@ yyreduce:
true_->sig.insert(true_->sig.end(), (yyvsp[-1].types)->begin(), (yyvsp[-1].types)->end());
delete (yyvsp[-1].types);
}
-#line 3246 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3242 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 97:
@@ -3251,7 +3247,7 @@ yyreduce:
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 3255 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3251 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 98:
@@ -3260,7 +3256,7 @@ yyreduce:
Expr* expr = Expr::CreateIf(new Block((yyvsp[-1].expr_list).first), nullptr);
(yyval.expr_list) = join_exprs1(&(yylsp[-3]), expr);
}
-#line 3264 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3260 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 99:
@@ -3269,7 +3265,7 @@ yyreduce:
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 3273 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3269 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 100:
@@ -3278,7 +3274,7 @@ yyreduce:
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 3282 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3278 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 101:
@@ -3287,7 +3283,7 @@ yyreduce:
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 3291 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3287 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 102:
@@ -3296,7 +3292,7 @@ yyreduce:
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 3300 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3296 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 103:
@@ -3304,7 +3300,7 @@ yyreduce:
{
CHECK_ALLOW_EXCEPTIONS(&(yylsp[0]), "rethrow");
}
-#line 3308 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3304 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 104:
@@ -3312,7 +3308,7 @@ yyreduce:
{
CHECK_ALLOW_EXCEPTIONS(&(yylsp[0]), "throw");
}
-#line 3316 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3312 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 105:
@@ -3320,13 +3316,13 @@ yyreduce:
{
CHECK_ALLOW_EXCEPTIONS(&(yylsp[0]), "try");
}
-#line 3324 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3320 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 106:
#line 782 "src/wast-parser.y" /* yacc.c:1646 */
{ WABT_ZERO_MEMORY((yyval.expr_list)); }
-#line 3330 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3326 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 107:
@@ -3337,13 +3333,13 @@ yyreduce:
(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 3341 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3337 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 108:
#line 791 "src/wast-parser.y" /* yacc.c:1646 */
{ WABT_ZERO_MEMORY((yyval.expr_list)); }
-#line 3347 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3343 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 109:
@@ -3354,7 +3350,7 @@ yyreduce:
(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 3358 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3354 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 111:
@@ -3365,7 +3361,7 @@ yyreduce:
(yyval.exception)->sig = std::move(*(yyvsp[-1].types));
delete (yyvsp[-1].types);
}
-#line 3369 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3365 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 112:
@@ -3375,7 +3371,7 @@ yyreduce:
(yyval.module_field)->loc = (yylsp[0]);
(yyval.module_field)->except = (yyvsp[0].exception);
}
-#line 3379 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3375 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 113:
@@ -3391,7 +3387,7 @@ yyreduce:
main->import->func->name = (yyvsp[-2].text);
}
}
-#line 3395 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3391 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 114:
@@ -3404,7 +3400,7 @@ yyreduce:
delete (yyvsp[-1].var);
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3408 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3404 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 115:
@@ -3414,7 +3410,7 @@ yyreduce:
field->func = (yyvsp[0].func);
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3418 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3414 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 116:
@@ -3430,7 +3426,7 @@ yyreduce:
delete (yyvsp[-1].var);
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3434 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3430 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 117:
@@ -3443,7 +3439,7 @@ yyreduce:
field->import->func = (yyvsp[0].func);
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3447 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3443 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 118:
@@ -3456,7 +3452,7 @@ yyreduce:
(yyval.module_fields).first = (yyvsp[0].module_fields).first;
(yyval.module_fields).last = (yyvsp[0].module_fields).last->next = field;
}
-#line 3460 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3456 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 119:
@@ -3465,7 +3461,7 @@ yyreduce:
(yyval.func) = (yyvsp[0].func);
reverse_bindings(&(yyval.func)->decl.sig.param_types, &(yyval.func)->param_bindings);
}
-#line 3469 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3465 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 121:
@@ -3476,7 +3472,7 @@ yyreduce:
(yyvsp[-2].types)->begin(), (yyvsp[-2].types)->end());
delete (yyvsp[-2].types);
}
-#line 3480 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3476 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 122:
@@ -3488,13 +3484,13 @@ yyreduce:
destroy_string_slice(&(yyvsp[-3].text));
(yyval.func)->decl.sig.param_types.insert((yyval.func)->decl.sig.param_types.begin(), (yyvsp[-2].type));
}
-#line 3492 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3488 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 123:
#line 903 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.func) = new Func(); }
-#line 3498 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3494 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 124:
@@ -3505,7 +3501,7 @@ yyreduce:
(yyvsp[-2].types)->begin(), (yyvsp[-2].types)->end());
delete (yyvsp[-2].types);
}
-#line 3509 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3505 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 125:
@@ -3514,7 +3510,7 @@ yyreduce:
(yyval.func) = (yyvsp[0].func);
reverse_bindings(&(yyval.func)->decl.sig.param_types, &(yyval.func)->param_bindings);
}
-#line 3518 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3514 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 127:
@@ -3525,7 +3521,7 @@ yyreduce:
(yyvsp[-2].types)->begin(), (yyvsp[-2].types)->end());
delete (yyvsp[-2].types);
}
-#line 3529 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3525 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 128:
@@ -3537,7 +3533,7 @@ yyreduce:
destroy_string_slice(&(yyvsp[-3].text));
(yyval.func)->decl.sig.param_types.insert((yyval.func)->decl.sig.param_types.begin(), (yyvsp[-2].type));
}
-#line 3541 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3537 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 130:
@@ -3548,7 +3544,7 @@ yyreduce:
(yyvsp[-2].types)->begin(), (yyvsp[-2].types)->end());
delete (yyvsp[-2].types);
}
-#line 3552 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3548 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 131:
@@ -3557,7 +3553,7 @@ yyreduce:
(yyval.func) = (yyvsp[0].func);
reverse_bindings(&(yyval.func)->local_types, &(yyval.func)->local_bindings);
}
-#line 3561 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3557 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 132:
@@ -3566,7 +3562,7 @@ yyreduce:
(yyval.func) = new Func();
(yyval.func)->first_expr = (yyvsp[0].expr_list).first;
}
-#line 3570 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3566 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 133:
@@ -3576,7 +3572,7 @@ yyreduce:
(yyval.func)->local_types.insert((yyval.func)->local_types.begin(), (yyvsp[-2].types)->begin(), (yyvsp[-2].types)->end());
delete (yyvsp[-2].types);
}
-#line 3580 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3576 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 134:
@@ -3588,7 +3584,7 @@ yyreduce:
destroy_string_slice(&(yyvsp[-3].text));
(yyval.func)->local_types.insert((yyval.func)->local_types.begin(), (yyvsp[-2].type));
}
-#line 3592 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3588 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 135:
@@ -3596,7 +3592,7 @@ yyreduce:
{
(yyval.expr_list) = (yyvsp[-1].expr_list);
}
-#line 3600 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3596 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 137:
@@ -3611,7 +3607,7 @@ yyreduce:
(yyval.module_field)->elem_segment->vars = std::move(*(yyvsp[-1].vars));
delete (yyvsp[-1].vars);
}
-#line 3615 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3611 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 138:
@@ -3627,7 +3623,7 @@ yyreduce:
(yyval.module_field)->elem_segment->vars = std::move(*(yyvsp[-1].vars));
delete (yyvsp[-1].vars);
}
-#line 3631 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3627 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 139:
@@ -3643,7 +3639,7 @@ yyreduce:
main->import->table->name = (yyvsp[-2].text);
}
}
-#line 3647 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3643 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 140:
@@ -3654,7 +3650,7 @@ yyreduce:
field->table = (yyvsp[0].table);
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3658 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3654 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 141:
@@ -3667,7 +3663,7 @@ yyreduce:
field->import->table = (yyvsp[0].table);
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3671 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3667 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 142:
@@ -3680,7 +3676,7 @@ yyreduce:
(yyval.module_fields).first = (yyvsp[0].module_fields).first;
(yyval.module_fields).last = (yyvsp[0].module_fields).last->next = field;
}
-#line 3684 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3680 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 143:
@@ -3702,7 +3698,7 @@ yyreduce:
(yyval.module_fields).first = table_field;
(yyval.module_fields).last = table_field->next = elem_field;
}
-#line 3706 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3702 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 144:
@@ -3717,7 +3713,7 @@ yyreduce:
dup_text_list(&(yyvsp[-1].text_list), &(yyval.module_field)->data_segment->data, &(yyval.module_field)->data_segment->size);
destroy_text_list(&(yyvsp[-1].text_list));
}
-#line 3721 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3717 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 145:
@@ -3733,7 +3729,7 @@ yyreduce:
dup_text_list(&(yyvsp[-1].text_list), &(yyval.module_field)->data_segment->data, &(yyval.module_field)->data_segment->size);
destroy_text_list(&(yyvsp[-1].text_list));
}
-#line 3737 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3733 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 146:
@@ -3749,7 +3745,7 @@ yyreduce:
main->import->memory->name = (yyvsp[-2].text);
}
}
-#line 3753 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3749 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 147:
@@ -3759,7 +3755,7 @@ yyreduce:
field->memory = (yyvsp[0].memory);
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3763 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3759 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 148:
@@ -3772,7 +3768,7 @@ yyreduce:
field->import->memory = (yyvsp[0].memory);
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3776 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3772 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 149:
@@ -3785,7 +3781,7 @@ yyreduce:
(yyval.module_fields).first = (yyvsp[0].module_fields).first;
(yyval.module_fields).last = (yyvsp[0].module_fields).last->next = field;
}
-#line 3789 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3785 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 150:
@@ -3811,7 +3807,7 @@ yyreduce:
(yyval.module_fields).first = memory_field;
(yyval.module_fields).last = memory_field->next = data_field;
}
-#line 3815 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3811 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 151:
@@ -3827,7 +3823,7 @@ yyreduce:
main->import->global->name = (yyvsp[-2].text);
}
}
-#line 3831 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3827 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 152:
@@ -3838,7 +3834,7 @@ yyreduce:
field->global->init_expr = (yyvsp[0].expr_list).first;
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3842 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3838 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 153:
@@ -3851,7 +3847,7 @@ yyreduce:
field->import->global = (yyvsp[0].global);
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3855 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3851 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 154:
@@ -3864,7 +3860,7 @@ yyreduce:
(yyval.module_fields).first = (yyvsp[0].module_fields).first;
(yyval.module_fields).last = (yyvsp[0].module_fields).last->next = field;
}
-#line 3868 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3864 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 155:
@@ -3878,7 +3874,7 @@ yyreduce:
(yyval.import)->func->decl.type_var = std::move(*(yyvsp[-1].var));
delete (yyvsp[-1].var);
}
-#line 3882 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3878 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 156:
@@ -3891,7 +3887,7 @@ yyreduce:
(yyval.import)->func->decl.sig = std::move(*(yyvsp[-1].func_sig));
delete (yyvsp[-1].func_sig);
}
-#line 3895 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3891 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 157:
@@ -3902,7 +3898,7 @@ yyreduce:
(yyval.import)->table = (yyvsp[-1].table);
(yyval.import)->table->name = (yyvsp[-2].text);
}
-#line 3906 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3902 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 158:
@@ -3913,7 +3909,7 @@ yyreduce:
(yyval.import)->memory = (yyvsp[-1].memory);
(yyval.import)->memory->name = (yyvsp[-2].text);
}
-#line 3917 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3913 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 159:
@@ -3924,7 +3920,7 @@ yyreduce:
(yyval.import)->global = (yyvsp[-1].global);
(yyval.import)->global->name = (yyvsp[-2].text);
}
-#line 3928 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3924 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 160:
@@ -3934,7 +3930,7 @@ yyreduce:
(yyval.import)->kind = ExternalKind::Except;
(yyval.import)->except = (yyvsp[0].exception);
}
-#line 3938 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3934 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 161:
@@ -3946,7 +3942,7 @@ yyreduce:
(yyval.module_field)->import->module_name = (yyvsp[-3].text);
(yyval.module_field)->import->field_name = (yyvsp[-2].text);
}
-#line 3950 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3946 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 162:
@@ -3956,7 +3952,7 @@ yyreduce:
(yyval.import)->module_name = (yyvsp[-2].text);
(yyval.import)->field_name = (yyvsp[-1].text);
}
-#line 3960 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3956 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 163:
@@ -3967,7 +3963,7 @@ yyreduce:
(yyval.export_)->var = std::move(*(yyvsp[-1].var));
delete (yyvsp[-1].var);
}
-#line 3971 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3967 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 164:
@@ -3978,7 +3974,7 @@ yyreduce:
(yyval.export_)->var = std::move(*(yyvsp[-1].var));
delete (yyvsp[-1].var);
}
-#line 3982 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3978 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 165:
@@ -3989,7 +3985,7 @@ yyreduce:
(yyval.export_)->var = std::move(*(yyvsp[-1].var));
delete (yyvsp[-1].var);
}
-#line 3993 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3989 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 166:
@@ -4000,7 +3996,7 @@ yyreduce:
(yyval.export_)->var = std::move(*(yyvsp[-1].var));
delete (yyvsp[-1].var);
}
-#line 4004 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4000 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 167:
@@ -4011,7 +4007,7 @@ yyreduce:
(yyval.export_)->var = std::move(*(yyvsp[-1].var));
delete (yyvsp[-1].var);
}
-#line 4015 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4011 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 168:
@@ -4022,7 +4018,7 @@ yyreduce:
(yyval.module_field)->export_ = (yyvsp[-1].export_);
(yyval.module_field)->export_->name = (yyvsp[-2].text);
}
-#line 4026 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4022 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 169:
@@ -4031,7 +4027,7 @@ yyreduce:
(yyval.export_) = new Export();
(yyval.export_)->name = (yyvsp[-1].text);
}
-#line 4035 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4031 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 170:
@@ -4043,7 +4039,7 @@ yyreduce:
(yyval.module_field)->func_type->sig = std::move(*(yyvsp[-1].func_sig));
delete (yyvsp[-1].func_sig);
}
-#line 4047 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4043 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 171:
@@ -4056,7 +4052,7 @@ yyreduce:
(yyval.module_field)->func_type->sig = std::move(*(yyvsp[-1].func_sig));
delete (yyvsp[-1].func_sig);
}
-#line 4060 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4056 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 172:
@@ -4067,55 +4063,55 @@ yyreduce:
(yyval.module_field)->start = std::move(*(yyvsp[-1].var));
delete (yyvsp[-1].var);
}
-#line 4071 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4067 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 173:
#line 1325 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4077 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4073 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 178:
#line 1330 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4083 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4079 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 179:
#line 1331 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4089 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4085 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 180:
#line 1332 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4095 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4091 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 181:
#line 1333 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4101 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4097 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 182:
#line 1334 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4107 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4103 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 183:
#line 1335 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4113 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4109 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 184:
#line 1339 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.module) = new Module(); }
-#line 4119 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4115 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 186:
@@ -4125,7 +4121,7 @@ yyreduce:
check_import_ordering(&(yylsp[0]), lexer, parser, (yyval.module), (yyvsp[0].module_fields).first);
append_module_fields((yyval.module), (yyvsp[0].module_fields).first);
}
-#line 4129 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4125 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 187:
@@ -4135,7 +4131,7 @@ yyreduce:
check_import_ordering(&(yylsp[0]), lexer, parser, (yyval.module), (yyvsp[0].module_fields).first);
append_module_fields((yyval.module), (yyvsp[0].module_fields).first);
}
-#line 4139 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4135 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 188:
@@ -4157,7 +4153,7 @@ yyreduce:
}
delete (yyvsp[0].script_module);
}
-#line 4161 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4157 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 190:
@@ -4165,7 +4161,7 @@ yyreduce:
{
(yyval.var) = new Var(kInvalidIndex);
}
-#line 4169 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4165 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 191:
@@ -4175,7 +4171,7 @@ yyreduce:
DUPTEXT(name, (yyvsp[0].text));
(yyval.var) = new Var(name);
}
-#line 4179 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4175 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 192:
@@ -4198,7 +4194,7 @@ yyreduce:
}
}
}
-#line 4202 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4198 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 193:
@@ -4211,7 +4207,7 @@ yyreduce:
dup_text_list(&(yyvsp[-1].text_list), &(yyval.script_module)->binary.data, &(yyval.script_module)->binary.size);
destroy_text_list(&(yyvsp[-1].text_list));
}
-#line 4215 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4211 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 194:
@@ -4224,7 +4220,7 @@ yyreduce:
dup_text_list(&(yyvsp[-1].text_list), &(yyval.script_module)->quoted.data, &(yyval.script_module)->quoted.size);
destroy_text_list(&(yyvsp[-1].text_list));
}
-#line 4228 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4224 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 195:
@@ -4240,7 +4236,7 @@ yyreduce:
(yyval.action)->invoke->args = std::move(*(yyvsp[-1].consts));
delete (yyvsp[-1].consts);
}
-#line 4244 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4240 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 196:
@@ -4253,7 +4249,7 @@ yyreduce:
(yyval.action)->type = ActionType::Get;
(yyval.action)->name = (yyvsp[-1].text);
}
-#line 4257 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4253 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 197:
@@ -4264,7 +4260,7 @@ yyreduce:
(yyval.command)->assert_malformed.module = (yyvsp[-2].script_module);
(yyval.command)->assert_malformed.text = (yyvsp[-1].text);
}
-#line 4268 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4264 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 198:
@@ -4275,7 +4271,7 @@ yyreduce:
(yyval.command)->assert_invalid.module = (yyvsp[-2].script_module);
(yyval.command)->assert_invalid.text = (yyvsp[-1].text);
}
-#line 4279 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4275 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 199:
@@ -4286,7 +4282,7 @@ yyreduce:
(yyval.command)->assert_unlinkable.module = (yyvsp[-2].script_module);
(yyval.command)->assert_unlinkable.text = (yyvsp[-1].text);
}
-#line 4290 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4286 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 200:
@@ -4297,7 +4293,7 @@ yyreduce:
(yyval.command)->assert_uninstantiable.module = (yyvsp[-2].script_module);
(yyval.command)->assert_uninstantiable.text = (yyvsp[-1].text);
}
-#line 4301 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4297 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 201:
@@ -4308,7 +4304,7 @@ yyreduce:
(yyval.command)->assert_return.action = (yyvsp[-2].action);
(yyval.command)->assert_return.expected = (yyvsp[-1].consts);
}
-#line 4312 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4308 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 202:
@@ -4318,7 +4314,7 @@ yyreduce:
(yyval.command)->type = CommandType::AssertReturnCanonicalNan;
(yyval.command)->assert_return_canonical_nan.action = (yyvsp[-1].action);
}
-#line 4322 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4318 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 203:
@@ -4328,7 +4324,7 @@ yyreduce:
(yyval.command)->type = CommandType::AssertReturnArithmeticNan;
(yyval.command)->assert_return_arithmetic_nan.action = (yyvsp[-1].action);
}
-#line 4332 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4328 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 204:
@@ -4339,7 +4335,7 @@ yyreduce:
(yyval.command)->assert_trap.action = (yyvsp[-2].action);
(yyval.command)->assert_trap.text = (yyvsp[-1].text);
}
-#line 4343 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4339 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 205:
@@ -4350,7 +4346,7 @@ yyreduce:
(yyval.command)->assert_trap.action = (yyvsp[-2].action);
(yyval.command)->assert_trap.text = (yyvsp[-1].text);
}
-#line 4354 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4350 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 206:
@@ -4360,7 +4356,7 @@ yyreduce:
(yyval.command)->type = CommandType::Action;
(yyval.command)->action = (yyvsp[0].action);
}
-#line 4364 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4360 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 208:
@@ -4370,7 +4366,7 @@ yyreduce:
(yyval.command)->type = CommandType::Module;
(yyval.command)->module = (yyvsp[0].module);
}
-#line 4374 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4370 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 209:
@@ -4383,7 +4379,7 @@ yyreduce:
delete (yyvsp[-1].var);
(yyval.command)->register_.var.loc = (yylsp[-1]);
}
-#line 4387 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4383 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 210:
@@ -4392,7 +4388,7 @@ yyreduce:
(yyval.commands) = new CommandPtrVector();
(yyval.commands)->emplace_back((yyvsp[0].command));
}
-#line 4396 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4392 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 211:
@@ -4401,7 +4397,7 @@ yyreduce:
(yyval.commands) = (yyvsp[-1].commands);
(yyval.commands)->emplace_back((yyvsp[0].command));
}
-#line 4405 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4401 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 212:
@@ -4416,13 +4412,13 @@ yyreduce:
}
delete [] (yyvsp[-1].literal).text.start;
}
-#line 4420 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4416 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 213:
#line 1553 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.consts) = new ConstVector(); }
-#line 4426 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4422 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 214:
@@ -4431,7 +4427,7 @@ yyreduce:
(yyval.consts) = (yyvsp[-1].consts);
(yyval.consts)->push_back((yyvsp[0].const_));
}
-#line 4435 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4431 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 215:
@@ -4439,7 +4435,7 @@ yyreduce:
{
(yyval.script) = new Script();
}
-#line 4443 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4439 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 216:
@@ -4504,7 +4500,7 @@ yyreduce:
}
}
}
-#line 4508 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4504 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 217:
@@ -4516,17 +4512,17 @@ yyreduce:
command->module = (yyvsp[0].module);
(yyval.script)->commands.emplace_back(command);
}
-#line 4520 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4516 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 218:
#line 1636 "src/wast-parser.y" /* yacc.c:1646 */
{ parser->script = (yyvsp[0].script); }
-#line 4526 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4522 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
-#line 4530 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4526 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -4801,14 +4797,6 @@ ExprList join_exprs2(Location* loc, ExprList* expr1, Expr* expr2) {
return result;
}
-ExprList join_expr_lists(ExprList* expr1, ExprList* expr2) {
- ExprList result;
- WABT_ZERO_MEMORY(result);
- append_expr_list(&result, expr1);
- append_expr_list(&result, expr2);
- return result;
-}
-
Result parse_const(Type type,
LiteralType literal_type,
const char* s,
@@ -5008,7 +4996,7 @@ void append_module_fields(Module* module, ModuleField* first) {
name = &field->import->except->name;
bindings = &module->except_bindings;
index = module->excepts.size();
- module->excepts.push_back(field->except);
+ module->excepts.push_back(field->import->except);
++module->num_except_imports;
break;
}
diff --git a/src/prebuilt/wast-parser-gen.output b/src/prebuilt/wast-parser-gen.output
index 06470897..ebfabe54 100644
--- a/src/prebuilt/wast-parser-gen.output
+++ b/src/prebuilt/wast-parser-gen.output
@@ -112,7 +112,7 @@ Grammar
79 | plain_catch_all
80 catch_instr_list: catch_instr
- 81 | catch_instr catch_instr_list
+ 81 | catch_instr_list catch_instr
82 expr: "(" expr1 ")"
@@ -5071,24 +5071,22 @@ State 375
State 376
80 catch_instr_list: catch_instr .
- 81 | catch_instr . catch_instr_list
-
- CATCH shift, and go to state 372
- CATCH_ALL shift, and go to state 373
$default reduce using rule 80 (catch_instr_list)
- plain_catch go to state 374
- plain_catch_all go to state 375
- catch_instr go to state 376
- catch_instr_list go to state 421
-
State 377
72 block_instr: try_check labeling_opt block catch_instr_list . END labeling_opt
+ 81 catch_instr_list: catch_instr_list . catch_instr
- END shift, and go to state 422
+ END shift, and go to state 421
+ CATCH shift, and go to state 372
+ CATCH_ALL shift, and go to state 373
+
+ plain_catch go to state 374
+ plain_catch_all go to state 375
+ catch_instr go to state 422
State 378
@@ -5766,13 +5764,6 @@ State 420
State 421
- 81 catch_instr_list: catch_instr catch_instr_list .
-
- $default reduce using rule 81 (catch_instr_list)
-
-
-State 422
-
72 block_instr: try_check labeling_opt block catch_instr_list END . labeling_opt
VAR shift, and go to state 53
@@ -5783,6 +5774,13 @@ State 422
labeling_opt go to state 448
+State 422
+
+ 81 catch_instr_list: catch_instr_list catch_instr .
+
+ $default reduce using rule 81 (catch_instr_list)
+
+
State 423
120 func_fields_import1: "(" PARAM value_type_list ")" . func_fields_import1
diff --git a/src/resolve-names.cc b/src/resolve-names.cc
index a55ec3c9..fe47ad38 100644
--- a/src/resolve-names.cc
+++ b/src/resolve-names.cc
@@ -46,6 +46,7 @@ class NameResolver : public ExprVisitor::DelegateNop {
Result OnBrTableExpr(Expr*) override;
Result OnCallExpr(Expr*) override;
Result OnCallIndirectExpr(Expr*) override;
+ Result OnCatchExpr(Expr*, Catch*) override;
Result OnGetGlobalExpr(Expr*) override;
Result OnGetLocalExpr(Expr*) override;
Result BeginIfExpr(Expr*) override;
@@ -55,6 +56,10 @@ class NameResolver : public ExprVisitor::DelegateNop {
Result OnSetGlobalExpr(Expr*) override;
Result OnSetLocalExpr(Expr*) override;
Result OnTeeLocalExpr(Expr*) override;
+ Result BeginTryExpr(Expr*) override;
+ Result EndTryExpr(Expr*) override;
+ Result OnThrowExpr(Expr*) override;
+ Result OnRethrowExpr(Expr*) override;
private:
void PrintError(const Location* loc, const char* fmt, ...);
@@ -68,6 +73,7 @@ class NameResolver : public ExprVisitor::DelegateNop {
void ResolveFuncTypeVar(Var* var);
void ResolveTableVar(Var* var);
void ResolveMemoryVar(Var* var);
+ void ResolveExceptionVar(Var* var);
void ResolveLocalVar(Var* var);
void VisitFunc(Func* func);
void VisitExport(Export* export_);
@@ -181,6 +187,10 @@ void NameResolver::ResolveMemoryVar(Var* var) {
ResolveVar(&current_module_->memory_bindings, var, "memory");
}
+void NameResolver::ResolveExceptionVar(Var* var) {
+ ResolveVar(&current_module_->except_bindings, var, "exception");
+}
+
void NameResolver::ResolveLocalVar(Var* var) {
if (var->type == VarType::Name) {
if (!current_func_)
@@ -281,6 +291,34 @@ Result NameResolver::OnTeeLocalExpr(Expr* expr) {
return Result::Ok;
}
+Result NameResolver::BeginTryExpr(Expr* expr) {
+ PushLabel(&expr->try_block.block->label);
+ return Result::Ok;
+}
+
+Result NameResolver::EndTryExpr(Expr*) {
+ PopLabel();
+ return Result::Ok;
+}
+
+Result NameResolver::OnCatchExpr(Expr* expr, Catch* catch_) {
+ if (!catch_->IsCatchAll())
+ ResolveExceptionVar(&catch_->var);
+ return Result::Ok;
+}
+
+Result NameResolver::OnThrowExpr(Expr* expr) {
+ ResolveExceptionVar(&expr->throw_.var);
+ return Result::Ok;
+}
+
+Result NameResolver::OnRethrowExpr(Expr* expr) {
+ // Note: the variable refers to corresponding (enclosing) catch, using the try
+ // block label for context.
+ ResolveLabelVar(&expr->rethrow_.var);
+ return Result::Ok;
+}
+
void NameResolver::VisitFunc(Func* func) {
current_func_ = func;
if (func->decl.has_func_type)
@@ -312,7 +350,7 @@ void NameResolver::VisitExport(Export* export_) {
break;
case ExternalKind::Except:
- WABT_FATAL("NameResolver::VisitExport(except) not defined\n");
+ ResolveExceptionVar(&export_->var);
break;
}
}
@@ -340,6 +378,7 @@ Result NameResolver::VisitModule(Module* module) {
CheckDuplicateBindings(&module->func_type_bindings, "function type");
CheckDuplicateBindings(&module->table_bindings, "table");
CheckDuplicateBindings(&module->memory_bindings, "memory");
+ CheckDuplicateBindings(&module->except_bindings, "except");
for (Func* func : module->funcs)
VisitFunc(func);
diff --git a/src/tools/wast-desugar.cc b/src/tools/wast-desugar.cc
index 55caf7d0..6103066f 100644
--- a/src/tools/wast-desugar.cc
+++ b/src/tools/wast-desugar.cc
@@ -38,6 +38,7 @@ static const char* s_infile;
static const char* s_outfile;
static WriteWatOptions s_write_wat_options;
static bool s_generate_names;
+static WastParseOptions s_parse_options;
static const char s_description[] =
R"( read a file in the wasm s-expression format and format it.
@@ -59,8 +60,13 @@ static void parse_options(int argc, char** argv) {
parser.AddHelpOption();
parser.AddOption('o', "output", "FILE", "Output file for the formatted file",
[](const char* argument) { s_outfile = argument; });
+ parser.AddOption("debug-parser", "Turn on debugging the parser of wast files",
+ []() { s_parse_options.debug_parsing = true; });
parser.AddOption('f', "fold-exprs", "Write folded expressions where possible",
[]() { s_write_wat_options.fold_exprs = true; });
+ parser.AddOption("future-exceptions",
+ "Test future extension for exception handling",
+ []() { s_parse_options.allow_future_exceptions = true; });
parser.AddOption(
"generate-names",
"Give auto-generated names to non-named functions, types, etc.",
@@ -81,7 +87,8 @@ int ProgramMain(int argc, char** argv) {
SourceErrorHandlerFile error_handler;
Script* script;
- Result result = parse_wast(lexer.get(), &script, &error_handler);
+ Result result = parse_wast(lexer.get(), &script, &error_handler,
+ &s_parse_options);
if (WABT_SUCCEEDED(result)) {
Module* module = script->GetFirstModule();
diff --git a/src/tools/wast2wasm.cc b/src/tools/wast2wasm.cc
index 5ff77df2..96eca46b 100644
--- a/src/tools/wast2wasm.cc
+++ b/src/tools/wast2wasm.cc
@@ -85,7 +85,7 @@ static void parse_options(int argc, char* argv[]) {
[]() { s_dump_module = true; });
parser.AddOption("future-exceptions",
"Test future extension for exception handling",
- []() { s_parse_options.allow_exceptions = true; });
+ []() { s_parse_options.allow_future_exceptions = true; });
parser.AddOption('o', "output", "FILE", "output wasm binary file",
[](const char* argument) { s_outfile = argument; });
parser.AddOption(
diff --git a/src/type-checker.cc b/src/type-checker.cc
index 82971dc9..2881d391 100644
--- a/src/type-checker.cc
+++ b/src/type-checker.cc
@@ -344,6 +344,24 @@ Result TypeChecker::OnCompare(Opcode opcode) {
return CheckOpcode2(opcode);
}
+Result TypeChecker::OnCatch(const TypeVector* sig) {
+ PushTypes(*sig);
+ return Result::Ok;
+}
+
+Result TypeChecker::OnCatchBlock(const TypeVector* sig) {
+ Result result = Result::Ok;
+ Label* label;
+ CHECK_RESULT(TopLabel(&label));
+ COMBINE_RESULT(result, CheckLabelType(label, LabelType::Try));
+ COMBINE_RESULT(result, PopAndCheckSignature(label->sig, "try block"));
+ COMBINE_RESULT(result, CheckTypeStackEnd("try block"));
+ ResetTypeStackToLabel(label);
+ label->label_type = LabelType::Catch;
+ label->unreachable = false;
+ return result;
+}
+
Result TypeChecker::OnConst(Type type) {
PushType(type);
return Result::Ok;
@@ -394,7 +412,8 @@ Result TypeChecker::OnEnd(Label* label,
Result TypeChecker::OnEnd() {
Result result = Result::Ok;
static const char* s_label_type_name[] = {"function", "block", "loop", "if",
- "if false branch"};
+ "if false branch", "try",
+ "try catch"};
WABT_STATIC_ASSERT(WABT_ARRAY_SIZE(s_label_type_name) == kLabelTypeCount);
Label* label;
CHECK_RESULT(TopLabel(&label));
@@ -439,6 +458,28 @@ Result TypeChecker::OnLoop(const TypeVector* sig) {
return Result::Ok;
}
+Result TypeChecker::OnRethrow(Index depth) {
+ Result result = Result::Ok;
+ Label* label;
+ CHECK_RESULT(GetLabel(depth, &label));
+ if (label->label_type != LabelType::Catch) {
+ // TODO(karlschimpf) Make this error more readable (readers
+ // typically think in terms of try/catch clauses, not all blocks).
+ PrintError("invalid rethrow depth: %" PRIindex " (max %" PRIzd ")", depth,
+ label_stack_.size() - 1);
+ result = Result::Error;
+ }
+ CHECK_RESULT(SetUnreachable());
+ return result;
+}
+
+Result TypeChecker::OnThrow(const TypeVector* sig) {
+ Result result = Result::Ok;
+ COMBINE_RESULT(result, PopAndCheckSignature(*sig, "throw"));
+ CHECK_RESULT(SetUnreachable());
+ return result;
+}
+
Result TypeChecker::OnReturn() {
Result result = Result::Ok;
Label* func_label;
@@ -469,6 +510,11 @@ Result TypeChecker::OnStore(Opcode opcode) {
return CheckOpcode2(opcode);
}
+Result TypeChecker::OnTryBlock(const TypeVector* sig) {
+ PushLabel(LabelType::Try, *sig);
+ return Result::Ok;
+}
+
Result TypeChecker::OnTeeLocal(Type type) {
Result result = Result::Ok;
Type value = Type::Any;
diff --git a/src/type-checker.h b/src/type-checker.h
index f7238365..849c701d 100644
--- a/src/type-checker.h
+++ b/src/type-checker.h
@@ -61,6 +61,8 @@ class TypeChecker {
Result OnCall(const TypeVector* param_types, const TypeVector* result_types);
Result OnCallIndirect(const TypeVector* param_types,
const TypeVector* result_types);
+ Result OnCatch(const TypeVector* sig);
+ Result OnCatchBlock(const TypeVector* sig);
Result OnCompare(Opcode);
Result OnConst(Type);
Result OnConvert(Opcode);
@@ -74,12 +76,15 @@ class TypeChecker {
Result OnIf(const TypeVector* sig);
Result OnLoad(Opcode);
Result OnLoop(const TypeVector* sig);
+ Result OnRethrow(Index depth);
Result OnReturn();
Result OnSelect();
Result OnSetGlobal(Type);
Result OnSetLocal(Type);
Result OnStore(Opcode);
Result OnTeeLocal(Type);
+ Result OnThrow(const TypeVector* sig);
+ Result OnTryBlock(const TypeVector* sig);
Result OnUnary(Opcode);
Result OnUnreachable();
Result EndFunction();
diff --git a/src/validator.cc b/src/validator.cc
index c7b16ad4..0ba45930 100644
--- a/src/validator.cc
+++ b/src/validator.cc
@@ -52,6 +52,11 @@ class Validator {
};
};
+ struct TryContext {
+ const Expr* try_ = nullptr;
+ const Catch* catch_ = nullptr;
+ };
+
void WABT_PRINTF_FORMAT(3, 4)
PrintError(const Location* loc, const char* fmt, ...);
void OnTypecheckerError(const char* msg);
@@ -133,6 +138,9 @@ class Validator {
void CheckAssertReturnNanCommand(const Action* action);
void CheckCommand(const Command* command);
+ void CheckExcept(const Location* loc, const Exception* Except);
+ Result CheckExceptVar(const Var* var, const Exception** out_except);
+
SourceErrorHandler* error_handler_ = nullptr;
WastLexer* lexer_ = nullptr;
const Script* script_ = nullptr;
@@ -142,10 +150,12 @@ class Validator {
Index current_memory_index_ = 0;
Index current_global_index_ = 0;
Index num_imported_globals_ = 0;
+ Index current_except_index_ = 0;
TypeChecker typechecker_;
// Cached for access by OnTypecheckerError.
const Location* expr_loc_ = nullptr;
Result result_ = Result::Ok;
+ std::vector<TryContext> try_contexts_;
};
Validator::Validator(SourceErrorHandler* error_handler,
@@ -464,16 +474,6 @@ void Validator::CheckExpr(const Expr* expr) {
break;
}
- case ExprType::Catch:
- // TODO(karlschimpf) Define.
- PrintError(&expr->loc, "Catch: don't know how to validate");
- break;
-
- case ExprType::CatchAll:
- // TODO(karlschimpf) Define.
- PrintError(&expr->loc, "CatchAll: don't know how to validate");
- break;
-
case ExprType::Compare:
typechecker_.OnCompare(expr->compare.opcode);
break;
@@ -537,8 +537,9 @@ void Validator::CheckExpr(const Expr* expr) {
break;
case ExprType::Rethrow:
- // TODO(karlschimpf) Define.
- PrintError(&expr->loc, "Rethrow: don't know how to validate");
+ if (try_contexts_.empty() || try_contexts_.back().catch_ == nullptr)
+ PrintError(&expr->loc, "Rethrow not in try catch block");
+ typechecker_.OnRethrow(expr->rethrow_.var.index);
break;
case ExprType::Return:
@@ -569,14 +570,42 @@ void Validator::CheckExpr(const Expr* expr) {
break;
case ExprType::Throw:
- // TODO(karlschimpf) Define.
- PrintError(&expr->loc, "Throw: don't know how to validate");
+ const Exception* except;
+ if (WABT_SUCCEEDED(CheckExceptVar(&expr->throw_.var, &except))) {
+ typechecker_.OnThrow(&except->sig);
+ }
break;
- case ExprType::TryBlock:
- // TODO(karlschimpf) Define.
- PrintError(&expr->loc, "TryBlock: don't know how to validate");
+ case ExprType::TryBlock: {
+ TryContext context;
+ context.try_ = expr;
+ try_contexts_.push_back(context);
+ CheckBlockSig(&expr->loc, Opcode::Try, &expr->try_block.block->sig);
+
+ typechecker_.OnTryBlock(&expr->try_block.block->sig);
+ CheckExprList(&expr->loc, expr->try_block.block->first);
+
+ if (expr->try_block.catches->empty())
+ PrintError(&expr->loc, "TryBlock: doesn't have any catch clauses");
+ bool found_catch_all = false;
+ for (const Catch* catch_ : *expr->try_block.catches) {
+ try_contexts_.back().catch_ = catch_;
+ typechecker_.OnCatchBlock(&expr->try_block.block->sig);
+ if (catch_->IsCatchAll()) {
+ found_catch_all = true;
+ } else {
+ if (found_catch_all)
+ PrintError(&catch_->loc, "Appears after catch all block");
+ const Exception* except = nullptr;
+ CheckExceptVar(&catch_->var, &except);
+ typechecker_.OnCatch(&except->sig);
+ }
+ CheckExprList(&catch_->loc, catch_->first);
+ }
+ typechecker_.OnEnd();
+ try_contexts_.pop_back();
break;
+ }
case ExprType::Unary:
typechecker_.OnUnary(expr->unary.opcode);
@@ -750,8 +779,8 @@ void Validator::CheckDataSegments(const Module* module) {
void Validator::CheckImport(const Location* loc, const Import* import) {
switch (import->kind) {
case ExternalKind::Except:
- // TODO(karlschimpf) Define.
- PrintError(loc, "import except: don't know how to validate");
+ ++current_except_index_;
+ CheckExcept(loc, import->except);
break;
case ExternalKind::Func:
if (import->func->decl.has_func_type)
@@ -759,18 +788,18 @@ void Validator::CheckImport(const Location* loc, const Import* import) {
break;
case ExternalKind::Table:
CheckTable(loc, import->table);
- current_table_index_++;
+ ++current_table_index_;
break;
case ExternalKind::Memory:
CheckMemory(loc, import->memory);
- current_memory_index_++;
+ ++current_memory_index_;
break;
case ExternalKind::Global:
if (import->global->mutable_) {
PrintError(loc, "mutable globals cannot be imported");
}
- num_imported_globals_++;
- current_global_index_++;
+ ++num_imported_globals_;
+ ++current_global_index_;
break;
}
}
@@ -778,8 +807,7 @@ void Validator::CheckImport(const Location* loc, const Import* import) {
void Validator::CheckExport(const Location* loc, const Export* export_) {
switch (export_->kind) {
case ExternalKind::Except:
- // TODO(karlschimpf) Define.
- PrintError(loc, "except: don't know how to validate export");
+ CheckExceptVar(&export_->var, nullptr);
break;
case ExternalKind::Func:
CheckFuncVar(&export_->var, nullptr);
@@ -821,13 +849,15 @@ void Validator::CheckModule(const Module* module) {
current_memory_index_ = 0;
current_global_index_ = 0;
num_imported_globals_ = 0;
+ current_except_index_ = 0;
for (ModuleField* field = module->first_field; field; field = field->next) {
switch (field->type) {
case ModuleFieldType::Except:
- // TODO(karlschimpf) Define.
- PrintError(&field->loc, "except clause: don't know how to validate");
+ ++current_except_index_;
+ CheckExcept(&field->loc, field->except);
break;
+
case ModuleFieldType::Func:
CheckFunc(&field->loc, field->func);
break;
@@ -959,6 +989,32 @@ Result Validator::CheckGet(const Action* action, Type* out_type) {
return Result::Ok;
}
+Result Validator::CheckExceptVar(const Var* var, const Exception** out_except) {
+ Index index;
+ if (WABT_FAILED(
+ CheckVar(current_module_->excepts.size(), var, "except", &index))) {
+ return Result::Error;
+ }
+ if (out_except)
+ *out_except = current_module_->excepts[index];
+ return Result::Ok;
+}
+
+void Validator::CheckExcept(const Location* loc, const Exception* except) {
+ for (Type ty : except->sig) {
+ switch (ty) {
+ case Type::I32:
+ case Type::I64:
+ case Type::F32:
+ case Type::F64:
+ break;
+ default:
+ PrintError(loc, "Invalid exception type: %s", get_type_name(ty));
+ break;
+ }
+ }
+}
+
Validator::ActionResult Validator::CheckAction(const Action* action) {
ActionResult result;
WABT_ZERO_MEMORY(result);
diff --git a/src/wast-parser-lexer-shared.h b/src/wast-parser-lexer-shared.h
index 76be8f31..c54d6368 100644
--- a/src/wast-parser-lexer-shared.h
+++ b/src/wast-parser-lexer-shared.h
@@ -65,6 +65,7 @@ union Token {
tokens is a hotspot when parsing large files. */
Action* action;
Block* block;
+ Catch* catch_;
Command* command;
CommandPtrVector* commands;
Const const_;
diff --git a/src/wast-parser.h b/src/wast-parser.h
index 53ba4422..ea83bbde 100644
--- a/src/wast-parser.h
+++ b/src/wast-parser.h
@@ -25,7 +25,7 @@ struct Script;
class SourceErrorHandler;
struct WastParseOptions {
- bool allow_exceptions = false;
+ bool allow_future_exceptions = false;
bool debug_parsing = false;
};
diff --git a/src/wast-parser.y b/src/wast-parser.y
index a5dabd42..2011aa02 100644
--- a/src/wast-parser.y
+++ b/src/wast-parser.y
@@ -97,7 +97,7 @@
#define CHECK_ALLOW_EXCEPTIONS(loc, opcode_name) \
do { \
- if (!parser->options->allow_exceptions) { \
+ if (!parser->options->allow_future_exceptions) { \
wast_parser_error(loc, lexer, parser, "opcode not allowed: %s", \
opcode_name); \
} \
@@ -116,7 +116,6 @@ static bool is_power_of_two(uint32_t x) {
static ExprList join_exprs1(Location* loc, Expr* expr1);
static ExprList join_exprs2(Location* loc, ExprList* expr1, Expr* expr2);
-static ExprList join_expr_lists(ExprList* expr1, ExprList* expr2);
static void append_expr_list(ExprList* expr_list, ExprList* expr);
static Result parse_const(Type type,
@@ -199,8 +198,8 @@ class BinaryErrorHandlerModule : public BinaryErrorHandler {
%type<export_> export_desc inline_export
%type<expr> plain_instr block_instr
%type<expr> try_
-%type<expr_list> plain_catch plain_catch_all
-%type<expr_list> catch_instr catch_sexp catch_sexp_list catch_instr_list
+%type<catch_> plain_catch plain_catch_all catch_instr catch_sexp
+%type<expr> catch_sexp_list catch_instr_list
%type<expr_list> instr instr_list expr expr1 expr_list if_ if_block const_expr offset
%type<func> func_fields_body func_fields_body1 func_result_body func_body func_body1
%type<func> func_fields_import func_fields_import1 func_fields_import_result
@@ -606,7 +605,8 @@ block_instr :
}
| try_check labeling_opt block catch_instr_list END labeling_opt {
$3->label = $2;
- $$ = Expr::CreateTry($3, $4.first);
+ $$ = $4;
+ $$->try_block.block = $3;
CHECK_END_LABEL(@6, $3->label, $6);
}
;
@@ -628,15 +628,15 @@ block :
plain_catch :
CATCH var instr_list {
- Expr* expr = Expr::CreateCatch(std::move(*$2), $3.first);
+ $$ = new Catch(std::move(*$2), $3.first);
+ $$->loc = @1;
delete $2;
- $$ = join_exprs1(&@1, expr);
}
;
plain_catch_all :
CATCH_ALL instr_list {
- Expr* expr = Expr::CreateCatchAll($2.first);
- $$ = join_exprs1(&@1, expr);
+ $$ = new Catch($2.first);
+ $$->loc = @1;
}
;
@@ -646,9 +646,13 @@ catch_instr :
;
catch_instr_list :
- catch_instr
- | catch_instr catch_instr_list {
- $$ = join_expr_lists(&$1, &$2);
+ catch_instr {
+ $$ = Expr::CreateTry();
+ $$->try_block.catches->push_back($1);
+ }
+ | catch_instr_list catch_instr {
+ $$ = $1;
+ $$->try_block.catches->push_back($2);
}
;
@@ -693,7 +697,8 @@ try_ :
| instr_list catch_sexp_list {
Block* block = new Block();
block->first = $1.first;
- $$ = Expr::CreateTry(block, $2.first);
+ $$ = $2;
+ $$->try_block.block = block;
}
;
@@ -707,10 +712,13 @@ catch_sexp :
;
catch_sexp_list :
- catch_sexp
+ catch_sexp {
+ $$ = Expr::CreateTry();
+ $$->try_block.catches->push_back($1);
+ }
| catch_sexp_list catch_sexp {
$$ = $1;
- append_expr_list(&$1, &$2);
+ $$->try_block.catches->push_back($2);
}
;
@@ -1667,14 +1675,6 @@ ExprList join_exprs2(Location* loc, ExprList* expr1, Expr* expr2) {
return result;
}
-ExprList join_expr_lists(ExprList* expr1, ExprList* expr2) {
- ExprList result;
- WABT_ZERO_MEMORY(result);
- append_expr_list(&result, expr1);
- append_expr_list(&result, expr2);
- return result;
-}
-
Result parse_const(Type type,
LiteralType literal_type,
const char* s,
@@ -1874,7 +1874,7 @@ void append_module_fields(Module* module, ModuleField* first) {
name = &field->import->except->name;
bindings = &module->except_bindings;
index = module->excepts.size();
- module->excepts.push_back(field->except);
+ module->excepts.push_back(field->import->except);
++module->num_except_imports;
break;
}