summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/binary-reader-ir.cc44
-rw-r--r--src/binary-writer.cc31
-rw-r--r--src/expr-visitor.cc18
-rw-r--r--src/expr-visitor.h2
-rw-r--r--src/ir.cc46
-rw-r--r--src/ir.h36
-rw-r--r--src/prebuilt/wast-parser-gen.cc1315
-rw-r--r--src/prebuilt/wast-parser-gen.hh4
-rw-r--r--src/validator.cc37
-rw-r--r--src/wast-parser-lexer-shared.h8
-rw-r--r--src/wast-parser.y177
-rw-r--r--src/wat-writer.cc52
12 files changed, 860 insertions, 910 deletions
diff --git a/src/binary-reader-ir.cc b/src/binary-reader-ir.cc
index 7398e7ea..4f685bfa 100644
--- a/src/binary-reader-ir.cc
+++ b/src/binary-reader-ir.cc
@@ -40,15 +40,14 @@ namespace wabt {
namespace {
struct LabelNode {
- LabelNode(LabelType, Expr** first);
+ LabelNode(LabelType, ExprList* exprs);
LabelType label_type;
- Expr** first;
- Expr* last;
+ ExprList* exprs;
};
-LabelNode::LabelNode(LabelType label_type, Expr** first)
- : label_type(label_type), first(first), last(nullptr) {}
+LabelNode::LabelNode(LabelType label_type, ExprList* exprs)
+ : label_type(label_type), exprs(exprs) {}
class BinaryReaderIR : public BinaryReaderNop {
public:
@@ -196,7 +195,7 @@ class BinaryReaderIR : public BinaryReaderNop {
bool HandleError(Offset offset, const char* message);
Location GetLocation() const;
void PrintError(const char* format, ...);
- void PushLabel(LabelType label_type, Expr** first);
+ void PushLabel(LabelType label_type, ExprList* first);
Result PopLabel();
Result GetLabelAt(LabelNode** label, Index depth);
Result TopLabel(LabelNode** label);
@@ -207,7 +206,7 @@ class BinaryReaderIR : public BinaryReaderNop {
Func* current_func = nullptr;
std::vector<LabelNode> label_stack;
- Expr** current_init_expr = nullptr;
+ ExprList* current_init_expr = nullptr;
const char* filename_;
};
@@ -229,7 +228,7 @@ void WABT_PRINTF_FORMAT(2, 3) BinaryReaderIR::PrintError(const char* format,
HandleError(kInvalidOffset, buffer);
}
-void BinaryReaderIR::PushLabel(LabelType label_type, Expr** first) {
+void BinaryReaderIR::PushLabel(LabelType label_type, ExprList* first) {
label_stack.emplace_back(label_type, first);
}
@@ -267,12 +266,7 @@ Result BinaryReaderIR::AppendExpr(Expr* expr) {
delete expr;
return Result::Error;
}
- if (*label->first) {
- label->last->next = expr;
- label->last = expr;
- } else {
- *label->first = label->last = expr;
- }
+ label->exprs->push_back(expr);
return Result::Ok;
}
@@ -504,7 +498,7 @@ Result BinaryReaderIR::OnFunctionBodyCount(Index count) {
Result BinaryReaderIR::BeginFunctionBody(Index index) {
current_func = module->funcs[index];
- PushLabel(LabelType::Func, &current_func->first_expr);
+ PushLabel(LabelType::Func, &current_func->exprs);
return Result::Ok;
}
@@ -525,7 +519,7 @@ Result BinaryReaderIR::OnBlockExpr(Index num_types, Type* sig_types) {
auto expr = new BlockExpr(new Block());
expr->block->sig.assign(sig_types, sig_types + num_types);
AppendExpr(expr);
- PushLabel(LabelType::Block, &expr->block->first);
+ PushLabel(LabelType::Block, &expr->block->exprs);
return Result::Ok;
}
@@ -595,8 +589,7 @@ Result BinaryReaderIR::OnElseExpr() {
CHECK_RESULT(GetLabelAt(&parent_label, 1));
label->label_type = LabelType::Else;
- label->first = &cast<IfExpr>(parent_label->last)->false_;
- label->last = nullptr;
+ label->exprs = &cast<IfExpr>(&parent_label->exprs->back())->false_;
return Result::Ok;
}
@@ -642,9 +635,8 @@ Result BinaryReaderIR::OnI64ConstExpr(uint64_t value) {
Result BinaryReaderIR::OnIfExpr(Index num_types, Type* sig_types) {
auto expr = new IfExpr(new Block());
expr->true_->sig.assign(sig_types, sig_types + num_types);
- expr->false_ = nullptr;
AppendExpr(expr);
- PushLabel(LabelType::If, &expr->true_->first);
+ PushLabel(LabelType::If, &expr->true_->exprs);
return Result::Ok;
}
@@ -659,7 +651,7 @@ Result BinaryReaderIR::OnLoopExpr(Index num_types, Type* sig_types) {
auto expr = new LoopExpr(new Block());
expr->block->sig.assign(sig_types, sig_types + num_types);
AppendExpr(expr);
- PushLabel(LabelType::Loop, &expr->block->first);
+ PushLabel(LabelType::Loop, &expr->block->exprs);
return Result::Ok;
}
@@ -837,14 +829,14 @@ Result BinaryReaderIR::OnLocalNameLocalCount(Index index, Index count) {
Result BinaryReaderIR::OnInitExprF32ConstExpr(Index index, uint32_t value) {
auto expr = new ConstExpr(Const(Const::F32(), value, GetLocation()));
expr->loc = GetLocation();
- *current_init_expr = expr;
+ current_init_expr->push_back(expr);
return Result::Ok;
}
Result BinaryReaderIR::OnInitExprF64ConstExpr(Index index, uint64_t value) {
auto expr = new ConstExpr(Const(Const::F64(), value, GetLocation()));
expr->loc = GetLocation();
- *current_init_expr = expr;
+ current_init_expr->push_back(expr);
return Result::Ok;
}
@@ -852,21 +844,21 @@ Result BinaryReaderIR::OnInitExprGetGlobalExpr(Index index,
Index global_index) {
auto expr = new GetGlobalExpr(Var(global_index, GetLocation()));
expr->loc = GetLocation();
- *current_init_expr = expr;
+ current_init_expr->push_back(expr);
return Result::Ok;
}
Result BinaryReaderIR::OnInitExprI32ConstExpr(Index index, uint32_t value) {
auto expr = new ConstExpr(Const(Const::I32(), value, GetLocation()));
expr->loc = GetLocation();
- *current_init_expr = expr;
+ current_init_expr->push_back(expr);
return Result::Ok;
}
Result BinaryReaderIR::OnInitExprI64ConstExpr(Index index, uint64_t value) {
auto expr = new ConstExpr(Const(Const::I64(), value, GetLocation()));
expr->loc = GetLocation();
- *current_init_expr = expr;
+ current_init_expr->push_back(expr);
return Result::Ok;
}
diff --git a/src/binary-writer.cc b/src/binary-writer.cc
index 9639685d..20eb2e1e 100644
--- a/src/binary-writer.cc
+++ b/src/binary-writer.cc
@@ -216,8 +216,10 @@ class BinaryWriter {
const char* desc,
RelocType reloc_type);
void WriteExpr(const Module* module, const Func* func, const Expr* expr);
- void WriteExprList(const Module* module, const Func* func, const Expr* first);
- void WriteInitExpr(const Module* module, const Expr* expr);
+ void WriteExprList(const Module* module,
+ const Func* func,
+ const ExprList& exprs);
+ void WriteInitExpr(const Module* module, const ExprList& expr);
void WriteFuncLocals(const Module* module,
const Func* func,
const TypeVector& local_types);
@@ -427,7 +429,7 @@ void BinaryWriter::WriteExpr(const Module* module,
case ExprType::Block:
write_opcode(&stream_, Opcode::Block);
write_inline_signature_type(&stream_, cast<BlockExpr>(expr)->block->sig);
- WriteExprList(module, func, cast<BlockExpr>(expr)->block->first);
+ WriteExprList(module, func, cast<BlockExpr>(expr)->block->exprs);
write_opcode(&stream_, Opcode::End);
break;
case ExprType::Br:
@@ -525,8 +527,8 @@ void BinaryWriter::WriteExpr(const Module* module,
auto if_expr = cast<IfExpr>(expr);
write_opcode(&stream_, Opcode::If);
write_inline_signature_type(&stream_, if_expr->true_->sig);
- WriteExprList(module, func, if_expr->true_->first);
- if (if_expr->false_) {
+ WriteExprList(module, func, if_expr->true_->exprs);
+ if (!if_expr->false_.empty()) {
write_opcode(&stream_, Opcode::Else);
WriteExprList(module, func, if_expr->false_);
}
@@ -544,7 +546,7 @@ void BinaryWriter::WriteExpr(const Module* module,
case ExprType::Loop:
write_opcode(&stream_, Opcode::Loop);
write_inline_signature_type(&stream_, cast<LoopExpr>(expr)->block->sig);
- WriteExprList(module, func, cast<LoopExpr>(expr)->block->first);
+ WriteExprList(module, func, cast<LoopExpr>(expr)->block->exprs);
write_opcode(&stream_, Opcode::End);
break;
case ExprType::Nop:
@@ -597,7 +599,7 @@ void BinaryWriter::WriteExpr(const Module* module,
auto try_expr = cast<TryExpr>(expr);
write_opcode(&stream_, Opcode::Try);
write_inline_signature_type(&stream_, try_expr->block->sig);
- WriteExprList(module, func, try_expr->block->first);
+ WriteExprList(module, func, try_expr->block->exprs);
for (Catch* catch_ : try_expr->catches) {
if (catch_->IsCatchAll()) {
write_opcode(&stream_, Opcode::CatchAll);
@@ -606,7 +608,7 @@ void BinaryWriter::WriteExpr(const Module* module,
write_u32_leb128(&stream_, GetExceptVarDepth(&catch_->var),
"catch exception");
}
- WriteExprList(module, func, catch_->first);
+ WriteExprList(module, func, catch_->exprs);
}
write_opcode(&stream_, Opcode::End);
break;
@@ -622,14 +624,13 @@ void BinaryWriter::WriteExpr(const Module* module,
void BinaryWriter::WriteExprList(const Module* module,
const Func* func,
- const Expr* first) {
- for (const Expr* expr = first; expr; expr = expr->next)
- WriteExpr(module, func, expr);
+ const ExprList& exprs) {
+ for (const Expr& expr : exprs)
+ WriteExpr(module, func, &expr);
}
-void BinaryWriter::WriteInitExpr(const Module* module, const Expr* expr) {
- if (expr)
- WriteExprList(module, nullptr, expr);
+void BinaryWriter::WriteInitExpr(const Module* module, const ExprList& expr) {
+ WriteExprList(module, nullptr, expr);
write_opcode(&stream_, Opcode::End);
}
@@ -678,7 +679,7 @@ void BinaryWriter::WriteFuncLocals(const Module* module,
void BinaryWriter::WriteFunc(const Module* module, const Func* func) {
WriteFuncLocals(module, func, func->local_types);
- WriteExprList(module, func, func->first_expr);
+ WriteExprList(module, func, func->exprs);
write_opcode(&stream_, Opcode::End);
}
diff --git a/src/expr-visitor.cc b/src/expr-visitor.cc
index 916f3b87..af8d16a5 100644
--- a/src/expr-visitor.cc
+++ b/src/expr-visitor.cc
@@ -38,7 +38,7 @@ Result ExprVisitor::VisitExpr(Expr* expr) {
case ExprType::Block: {
auto block_expr = cast<BlockExpr>(expr);
CHECK_RESULT(delegate_->BeginBlockExpr(block_expr));
- CHECK_RESULT(VisitExprList(block_expr->block->first));
+ CHECK_RESULT(VisitExprList(block_expr->block->exprs));
CHECK_RESULT(delegate_->EndBlockExpr(block_expr));
break;
}
@@ -99,7 +99,7 @@ Result ExprVisitor::VisitExpr(Expr* expr) {
case ExprType::If: {
auto if_expr = cast<IfExpr>(expr);
CHECK_RESULT(delegate_->BeginIfExpr(if_expr));
- CHECK_RESULT(VisitExprList(if_expr->true_->first));
+ CHECK_RESULT(VisitExprList(if_expr->true_->exprs));
CHECK_RESULT(delegate_->AfterIfTrueExpr(if_expr));
CHECK_RESULT(VisitExprList(if_expr->false_));
CHECK_RESULT(delegate_->EndIfExpr(if_expr));
@@ -113,7 +113,7 @@ Result ExprVisitor::VisitExpr(Expr* expr) {
case ExprType::Loop: {
auto loop_expr = cast<LoopExpr>(expr);
CHECK_RESULT(delegate_->BeginLoopExpr(loop_expr));
- CHECK_RESULT(VisitExprList(loop_expr->block->first));
+ CHECK_RESULT(VisitExprList(loop_expr->block->exprs));
CHECK_RESULT(delegate_->EndLoopExpr(loop_expr));
break;
}
@@ -157,10 +157,10 @@ Result ExprVisitor::VisitExpr(Expr* expr) {
case ExprType::TryBlock: {
auto try_expr = cast<TryExpr>(expr);
CHECK_RESULT(delegate_->BeginTryExpr(try_expr));
- CHECK_RESULT(VisitExprList(try_expr->block->first));
+ CHECK_RESULT(VisitExprList(try_expr->block->exprs));
for (Catch* catch_ : try_expr->catches) {
CHECK_RESULT(delegate_->OnCatchExpr(try_expr, catch_));
- CHECK_RESULT(VisitExprList(catch_->first));
+ CHECK_RESULT(VisitExprList(catch_->exprs));
}
CHECK_RESULT(delegate_->EndTryExpr(try_expr));
break;
@@ -178,14 +178,14 @@ Result ExprVisitor::VisitExpr(Expr* expr) {
return Result::Ok;
}
-Result ExprVisitor::VisitExprList(Expr* first) {
- for (Expr* expr = first; expr; expr = expr->next)
- CHECK_RESULT(VisitExpr(expr));
+Result ExprVisitor::VisitExprList(ExprList& exprs) {
+ for (Expr& expr : exprs)
+ CHECK_RESULT(VisitExpr(&expr));
return Result::Ok;
}
Result ExprVisitor::VisitFunc(Func* func) {
- return VisitExprList(func->first_expr);
+ return VisitExprList(func->exprs);
}
} // namespace wabt
diff --git a/src/expr-visitor.h b/src/expr-visitor.h
index 3c8b6b5f..249fccc4 100644
--- a/src/expr-visitor.h
+++ b/src/expr-visitor.h
@@ -30,7 +30,7 @@ class ExprVisitor {
explicit ExprVisitor(Delegate* delegate);
Result VisitExpr(Expr*);
- Result VisitExprList(Expr*);
+ Result VisitExprList(ExprList&);
Result VisitFunc(Func*);
private:
diff --git a/src/ir.cc b/src/ir.cc
index 5f6f27af..c3196a33 100644
--- a/src/ir.cc
+++ b/src/ir.cc
@@ -241,15 +241,6 @@ FuncType* Module::AppendImplicitFuncType(const Location& loc,
return func_type;
}
-void DestroyExprList(Expr* first) {
- Expr* expr = first;
- while (expr) {
- Expr* next = expr->next;
- delete expr;
- expr = next;
- }
-}
-
Var::Var(Index index) : type(VarType::Index), index(index) {
}
@@ -325,33 +316,24 @@ Const::Const(F64, uint64_t value, const Location& loc_)
: loc(loc_), type(Type::F64), f64_bits(value) {
}
-
-Block::Block(): first(nullptr) {
+Block::Block() {
ZeroMemory(label);
}
-Block::Block(Expr* first) : first(first) {
+Block::Block(ExprList exprs) : exprs(std::move(exprs)) {
ZeroMemory(label);
}
Block::~Block() {
destroy_string_slice(&label);
- DestroyExprList(first);
-}
-
-Catch::Catch(Expr* first) : first(first) {
}
-Catch::Catch(Var var, Expr* first) : var(var), first(first) {
-}
+Catch::Catch(ExprList exprs) : exprs(std::move(exprs)) {}
-Catch::~Catch() {
- delete first;
-}
+Catch::Catch(Var var, ExprList exprs) : var(var), exprs(std::move(exprs)) {}
IfExpr::~IfExpr() {
delete true_;
- DestroyExprList(false_);
}
TryExpr::~TryExpr() {
@@ -360,8 +342,7 @@ TryExpr::~TryExpr() {
delete catch_;
}
-Expr::Expr(ExprType type) : type(type), next(nullptr) {
-}
+Expr::Expr(ExprType type) : type(type) {}
FuncType::FuncType() {
ZeroMemory(name);
@@ -374,24 +355,20 @@ FuncType::~FuncType() {
FuncDeclaration::FuncDeclaration()
: has_func_type(false), type_var(kInvalidIndex) {}
-FuncDeclaration::~FuncDeclaration() {}
-
-Func::Func() : first_expr(nullptr) {
+Func::Func() {
ZeroMemory(name);
}
Func::~Func() {
destroy_string_slice(&name);
- DestroyExprList(first_expr);
}
-Global::Global() : type(Type::Void), mutable_(false), init_expr(nullptr) {
+Global::Global() : type(Type::Void), mutable_(false) {
ZeroMemory(name);
}
Global::~Global() {
destroy_string_slice(&name);
- DestroyExprList(init_expr);
}
Table::Table() {
@@ -403,16 +380,11 @@ Table::~Table() {
destroy_string_slice(&name);
}
-ElemSegment::ElemSegment() : table_var(kInvalidIndex), offset(nullptr) {}
-
-ElemSegment::~ElemSegment() {
- DestroyExprList(offset);
-}
+ElemSegment::ElemSegment() : table_var(kInvalidIndex) {}
-DataSegment::DataSegment() : offset(nullptr), data(nullptr), size(0) {}
+DataSegment::DataSegment() : data(nullptr), size(0) {}
DataSegment::~DataSegment() {
- DestroyExprList(offset);
delete[] data;
}
diff --git a/src/ir.h b/src/ir.h
index d4b12001..2d450781 100644
--- a/src/ir.h
+++ b/src/ir.h
@@ -27,6 +27,7 @@
#include "binding-hash.h"
#include "common.h"
+#include "intrusive-list.h"
#include "opcode.h"
namespace wabt {
@@ -123,27 +124,27 @@ const char* GetExprTypeName(ExprType type);
typedef TypeVector BlockSignature;
class Expr;
+typedef intrusive_list<Expr> ExprList;
struct Block {
WABT_DISALLOW_COPY_AND_ASSIGN(Block);
Block();
- explicit Block(Expr* first);
+ explicit Block(ExprList exprs);
~Block();
Label label;
BlockSignature sig;
- Expr* first;
+ ExprList exprs;
};
struct Catch {
WABT_DISALLOW_COPY_AND_ASSIGN(Catch);
Catch() = delete;
- explicit Catch(Expr* first);
- Catch(Var var, Expr* first);
- ~Catch();
+ explicit Catch(ExprList exprs);
+ Catch(Var var, ExprList exprs);
Location loc;
Var var;
- Expr* first;
+ ExprList exprs;
bool IsCatchAll() const {
return var.type == VarType::Index && var.index == kInvalidIndex;
}
@@ -151,15 +152,14 @@ struct Catch {
typedef std::vector<Catch*> CatchVector;
-class Expr {
+class Expr : public intrusive_list_base<Expr> {
public:
WABT_DISALLOW_COPY_AND_ASSIGN(Expr);
Expr() = delete;
- virtual ~Expr() {}
+ virtual ~Expr() = default;
Location loc;
ExprType type;
- Expr* next;
protected:
explicit Expr(ExprType);
@@ -230,12 +230,12 @@ typedef BlockExprBase<ExprType::Loop> LoopExpr;
class IfExpr : public ExprMixin<ExprType::If> {
public:
- explicit IfExpr(Block* true_block, Expr* false_expr = nullptr)
- : true_(true_block), false_(false_expr) {}
+ explicit IfExpr(Block* true_block, ExprList false_expr = ExprList())
+ : true_(true_block), false_(std::move(false_expr)) {}
~IfExpr();
Block* true_;
- Expr* false_;
+ ExprList false_;
};
class TryExpr : public ExprMixin<ExprType::TryBlock> {
@@ -313,7 +313,6 @@ struct FuncType {
struct FuncDeclaration {
WABT_DISALLOW_COPY_AND_ASSIGN(FuncDeclaration);
FuncDeclaration();
- ~FuncDeclaration();
Index GetNumParams() const { return sig.GetNumParams(); }
Index GetNumResults() const { return sig.GetNumResults(); }
@@ -345,7 +344,7 @@ struct Func {
TypeVector local_types;
BindingHash param_bindings;
BindingHash local_bindings;
- Expr* first_expr;
+ ExprList exprs;
};
struct Global {
@@ -356,7 +355,7 @@ struct Global {
StringSlice name;
Type type;
bool mutable_;
- Expr* init_expr;
+ ExprList init_expr;
};
struct Table {
@@ -371,10 +370,9 @@ struct Table {
struct ElemSegment {
WABT_DISALLOW_COPY_AND_ASSIGN(ElemSegment);
ElemSegment();
- ~ElemSegment();
Var table_var;
- Expr* offset;
+ ExprList offset;
VarVector vars;
};
@@ -393,7 +391,7 @@ struct DataSegment {
~DataSegment();
Var memory_var;
- Expr* offset;
+ ExprList offset;
char* data;
size_t size;
};
@@ -839,8 +837,6 @@ struct Script {
BindingHash module_bindings;
};
-void DestroyExprList(Expr*);
-
void MakeTypeBindingReverseMapping(
const TypeVector&,
const BindingHash&,
diff --git a/src/prebuilt/wast-parser-gen.cc b/src/prebuilt/wast-parser-gen.cc
index 30d7e769..5d566266 100644
--- a/src/prebuilt/wast-parser-gen.cc
+++ b/src/prebuilt/wast-parser-gen.cc
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.0.2. */
+/* A Bison parser, made by GNU Bison 3.0.4. */
/* Bison implementation for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -44,7 +44,7 @@
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "3.0.2"
+#define YYBISON_VERSION "3.0.4"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -172,10 +172,6 @@ static bool is_power_of_two(uint32_t x) {
return x && ((x & (x - 1)) == 0);
}
-static ExprList join_exprs1(Location* loc, Expr* expr1);
-static ExprList join_exprs2(Location* loc, ExprList* expr1, Expr* expr2);
-static void append_expr_list(ExprList* expr_list, ExprList* expr);
-
static Result parse_const(Type type,
LiteralType literal_type,
const char* s,
@@ -211,7 +207,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 211 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:339 */
# ifndef YY_NULLPTR
# if defined __cplusplus && 201103L <= __cplusplus
@@ -366,7 +362,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 366 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:358 */
#ifdef short
# undef short
@@ -673,28 +669,28 @@ static const yytype_uint8 yytranslate[] =
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 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, 555, 558, 561, 564, 567, 570, 573, 577, 584,
- 590, 596, 602, 609, 618, 621, 626, 633, 640, 647,
- 648, 652, 657, 664, 668, 671, 676, 681, 686, 694,
- 700, 709, 712, 718, 723, 731, 738, 741, 745, 749,
- 753, 757, 761, 768, 773, 779, 785, 786, 794, 795,
- 803, 808, 816, 823, 836, 843, 847, 856, 862, 871,
- 878, 879, 885, 895, 896, 905, 912, 913, 919, 929,
- 930, 939, 946, 950, 955, 967, 970, 974, 983, 996,
- 1009, 1013, 1019, 1025, 1045, 1054, 1067, 1080, 1084, 1090,
- 1096, 1119, 1132, 1137, 1143, 1154, 1163, 1171, 1177, 1183,
- 1189, 1197, 1206, 1214, 1220, 1226, 1232, 1238, 1246, 1254,
- 1264, 1270, 1280, 1287, 1288, 1289, 1290, 1291, 1292, 1293,
- 1294, 1295, 1296, 1297, 1301, 1302, 1306, 1311, 1319, 1340,
- 1347, 1350, 1358, 1376, 1384, 1395, 1406, 1417, 1420, 1423,
- 1426, 1429, 1432, 1435, 1438, 1441, 1447, 1450, 1451, 1454,
- 1462, 1466, 1473, 1485, 1486, 1493, 1496, 1560, 1569
+ 0, 260, 260, 266, 276, 277, 281, 299, 300, 306,
+ 309, 314, 322, 326, 327, 332, 341, 342, 350, 356,
+ 362, 367, 374, 380, 391, 395, 399, 406, 410, 418,
+ 419, 426, 427, 430, 434, 435, 439, 440, 456, 457,
+ 472, 476, 480, 484, 487, 490, 493, 496, 500, 504,
+ 508, 511, 515, 519, 523, 527, 531, 535, 539, 542,
+ 545, 557, 560, 563, 566, 569, 572, 575, 579, 586,
+ 592, 598, 604, 612, 621, 624, 629, 636, 644, 652,
+ 653, 657, 662, 669, 673, 678, 684, 690, 695, 704,
+ 710, 720, 723, 729, 734, 742, 749, 752, 759, 765,
+ 773, 780, 788, 798, 803, 809, 815, 816, 823, 824,
+ 831, 836, 844, 851, 864, 871, 875, 884, 890, 899,
+ 906, 907, 913, 923, 924, 933, 940, 941, 947, 957,
+ 958, 967, 974, 979, 984, 996, 999, 1003, 1013, 1027,
+ 1040, 1044, 1050, 1056, 1076, 1086, 1100, 1113, 1117, 1123,
+ 1129, 1152, 1165, 1171, 1177, 1188, 1197, 1205, 1211, 1217,
+ 1223, 1231, 1240, 1248, 1254, 1260, 1266, 1272, 1280, 1288,
+ 1298, 1304, 1314, 1321, 1322, 1323, 1324, 1325, 1326, 1327,
+ 1328, 1329, 1330, 1331, 1335, 1336, 1340, 1345, 1353, 1374,
+ 1381, 1384, 1392, 1410, 1418, 1429, 1440, 1451, 1454, 1457,
+ 1460, 1463, 1466, 1469, 1472, 1475, 1481, 1484, 1485, 1488,
+ 1496, 1500, 1507, 1519, 1520, 1527, 1530, 1594, 1603
};
#endif
@@ -1725,417 +1721,417 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
switch (yytype)
{
case 5: /* NAT */
-#line 228 "src/wast-parser.y" /* yacc.c:1257 */
+#line 224 "src/wast-parser.y" /* yacc.c:1257 */
{}
-#line 1731 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1727 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 6: /* INT */
-#line 228 "src/wast-parser.y" /* yacc.c:1257 */
+#line 224 "src/wast-parser.y" /* yacc.c:1257 */
{}
-#line 1737 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1733 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 7: /* FLOAT */
-#line 228 "src/wast-parser.y" /* yacc.c:1257 */
+#line 224 "src/wast-parser.y" /* yacc.c:1257 */
{}
-#line 1743 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1739 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 8: /* TEXT */
-#line 228 "src/wast-parser.y" /* yacc.c:1257 */
+#line 224 "src/wast-parser.y" /* yacc.c:1257 */
{}
-#line 1749 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1745 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 9: /* VAR */
-#line 228 "src/wast-parser.y" /* yacc.c:1257 */
+#line 224 "src/wast-parser.y" /* yacc.c:1257 */
{}
-#line 1755 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1751 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 41: /* OFFSET_EQ_NAT */
-#line 228 "src/wast-parser.y" /* yacc.c:1257 */
+#line 224 "src/wast-parser.y" /* yacc.c:1257 */
{}
-#line 1761 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1757 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 42: /* ALIGN_EQ_NAT */
-#line 228 "src/wast-parser.y" /* yacc.c:1257 */
+#line 224 "src/wast-parser.y" /* yacc.c:1257 */
{}
-#line 1767 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1763 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 83: /* text_list */
-#line 248 "src/wast-parser.y" /* yacc.c:1257 */
+#line 244 "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 1769 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 84: /* text_list_opt */
-#line 248 "src/wast-parser.y" /* yacc.c:1257 */
+#line 244 "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 1775 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 85: /* quoted_text */
-#line 229 "src/wast-parser.y" /* yacc.c:1257 */
+#line 225 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_string_slice(&((*yyvaluep).text)); }
-#line 1785 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1781 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 86: /* value_type_list */
-#line 249 "src/wast-parser.y" /* yacc.c:1257 */
+#line 245 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).types); }
-#line 1791 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1787 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 88: /* global_type */
-#line 242 "src/wast-parser.y" /* yacc.c:1257 */
+#line 238 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).global); }
-#line 1797 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1793 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 89: /* func_type */
-#line 241 "src/wast-parser.y" /* yacc.c:1257 */
+#line 237 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func_sig); }
-#line 1803 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1799 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 90: /* func_sig */
-#line 241 "src/wast-parser.y" /* yacc.c:1257 */
+#line 237 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func_sig); }
-#line 1809 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1805 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 91: /* func_sig_result */
-#line 241 "src/wast-parser.y" /* yacc.c:1257 */
+#line 237 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func_sig); }
-#line 1815 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1811 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 93: /* memory_sig */
-#line 244 "src/wast-parser.y" /* yacc.c:1257 */
+#line 240 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).memory); }
-#line 1821 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1817 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 95: /* type_use */
-#line 250 "src/wast-parser.y" /* yacc.c:1257 */
+#line 246 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).var); }
-#line 1827 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1823 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 97: /* literal */
-#line 230 "src/wast-parser.y" /* yacc.c:1257 */
+#line 226 "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 1829 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 98: /* var */
-#line 250 "src/wast-parser.y" /* yacc.c:1257 */
+#line 246 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).var); }
-#line 1839 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1835 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 99: /* var_list */
-#line 251 "src/wast-parser.y" /* yacc.c:1257 */
+#line 247 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).vars); }
-#line 1845 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1841 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 100: /* bind_var_opt */
-#line 229 "src/wast-parser.y" /* yacc.c:1257 */
+#line 225 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_string_slice(&((*yyvaluep).text)); }
-#line 1851 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1847 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 101: /* bind_var */
-#line 229 "src/wast-parser.y" /* yacc.c:1257 */
+#line 225 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_string_slice(&((*yyvaluep).text)); }
-#line 1857 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1853 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 102: /* labeling_opt */
-#line 229 "src/wast-parser.y" /* yacc.c:1257 */
+#line 225 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_string_slice(&((*yyvaluep).text)); }
-#line 1863 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1859 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 105: /* instr */
-#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 234 "src/wast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).expr_list); }
+#line 1865 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 106: /* plain_instr */
-#line 237 "src/wast-parser.y" /* yacc.c:1257 */
+#line 233 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).expr); }
-#line 1875 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1871 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 107: /* block_instr */
-#line 237 "src/wast-parser.y" /* yacc.c:1257 */
+#line 233 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).expr); }
-#line 1881 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1877 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 108: /* block_sig */
-#line 249 "src/wast-parser.y" /* yacc.c:1257 */
+#line 245 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).types); }
-#line 1887 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1883 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 109: /* block */
-#line 232 "src/wast-parser.y" /* yacc.c:1257 */
+#line 228 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).block); }
-#line 1893 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1889 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 114: /* expr */
-#line 238 "src/wast-parser.y" /* yacc.c:1257 */
- { DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 1899 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 234 "src/wast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).expr_list); }
+#line 1895 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 115: /* expr1 */
-#line 238 "src/wast-parser.y" /* yacc.c:1257 */
- { DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 1905 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 234 "src/wast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).expr_list); }
+#line 1901 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 119: /* if_block */
-#line 238 "src/wast-parser.y" /* yacc.c:1257 */
- { DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 1911 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 234 "src/wast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).expr_list); }
+#line 1907 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 120: /* if_ */
-#line 238 "src/wast-parser.y" /* yacc.c:1257 */
- { DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 1917 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 234 "src/wast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).expr_list); }
+#line 1913 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 124: /* instr_list */
-#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 234 "src/wast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).expr_list); }
+#line 1919 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 125: /* expr_list */
-#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 234 "src/wast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).expr_list); }
+#line 1925 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 126: /* const_expr */
-#line 238 "src/wast-parser.y" /* yacc.c:1257 */
- { DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 1935 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 234 "src/wast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).expr_list); }
+#line 1931 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 129: /* func */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
+#line 235 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_module_field_list(&((*yyvaluep).module_fields)); }
-#line 1941 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1937 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 130: /* func_fields */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
+#line 235 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_module_field_list(&((*yyvaluep).module_fields)); }
-#line 1947 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1943 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 131: /* func_fields_import */
-#line 240 "src/wast-parser.y" /* yacc.c:1257 */
+#line 236 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func); }
-#line 1953 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1949 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 132: /* func_fields_import1 */
-#line 240 "src/wast-parser.y" /* yacc.c:1257 */
+#line 236 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func); }
-#line 1959 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1955 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 133: /* func_fields_import_result */
-#line 240 "src/wast-parser.y" /* yacc.c:1257 */
+#line 236 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func); }
-#line 1965 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1961 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 134: /* func_fields_body */
-#line 240 "src/wast-parser.y" /* yacc.c:1257 */
+#line 236 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func); }
-#line 1971 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1967 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 135: /* func_fields_body1 */
-#line 240 "src/wast-parser.y" /* yacc.c:1257 */
+#line 236 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func); }
-#line 1977 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1973 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 136: /* func_result_body */
-#line 240 "src/wast-parser.y" /* yacc.c:1257 */
+#line 236 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func); }
-#line 1983 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1979 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 137: /* func_body */
-#line 240 "src/wast-parser.y" /* yacc.c:1257 */
+#line 236 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func); }
-#line 1989 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1985 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 138: /* func_body1 */
-#line 240 "src/wast-parser.y" /* yacc.c:1257 */
+#line 236 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).func); }
-#line 1995 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 1991 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 139: /* offset */
-#line 238 "src/wast-parser.y" /* yacc.c:1257 */
- { DestroyExprList(((*yyvaluep).expr_list).first); }
-#line 2001 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 234 "src/wast-parser.y" /* yacc.c:1257 */
+ { delete ((*yyvaluep).expr_list); }
+#line 1997 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 141: /* table */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
+#line 235 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_module_field_list(&((*yyvaluep).module_fields)); }
-#line 2007 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2003 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 142: /* table_fields */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
+#line 235 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_module_field_list(&((*yyvaluep).module_fields)); }
-#line 2013 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2009 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 144: /* memory */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
+#line 235 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_module_field_list(&((*yyvaluep).module_fields)); }
-#line 2019 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2015 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 145: /* memory_fields */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
+#line 235 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_module_field_list(&((*yyvaluep).module_fields)); }
-#line 2025 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2021 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 146: /* global */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
+#line 235 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_module_field_list(&((*yyvaluep).module_fields)); }
-#line 2031 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2027 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 147: /* global_fields */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
+#line 235 "src/wast-parser.y" /* yacc.c:1257 */
{ destroy_module_field_list(&((*yyvaluep).module_fields)); }
-#line 2037 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2033 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 148: /* import_desc */
-#line 243 "src/wast-parser.y" /* yacc.c:1257 */
+#line 239 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).import); }
-#line 2043 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2039 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 150: /* inline_import */
-#line 243 "src/wast-parser.y" /* yacc.c:1257 */
+#line 239 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).import); }
-#line 2049 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2045 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 151: /* export_desc */
-#line 236 "src/wast-parser.y" /* yacc.c:1257 */
+#line 232 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).export_); }
-#line 2055 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2051 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 153: /* inline_export */
-#line 236 "src/wast-parser.y" /* yacc.c:1257 */
+#line 232 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).export_); }
-#line 2061 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2057 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 156: /* module_field */
-#line 239 "src/wast-parser.y" /* yacc.c:1257 */
+#line 235 "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 2063 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 157: /* module_fields_opt */
-#line 245 "src/wast-parser.y" /* yacc.c:1257 */
+#line 241 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).module); }
-#line 2073 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2069 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 158: /* module_fields */
-#line 245 "src/wast-parser.y" /* yacc.c:1257 */
+#line 241 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).module); }
-#line 2079 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2075 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 159: /* module */
-#line 245 "src/wast-parser.y" /* yacc.c:1257 */
+#line 241 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).module); }
-#line 2085 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2081 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 160: /* inline_module */
-#line 245 "src/wast-parser.y" /* yacc.c:1257 */
+#line 241 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).module); }
-#line 2091 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2087 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 161: /* script_var_opt */
-#line 250 "src/wast-parser.y" /* yacc.c:1257 */
+#line 246 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).var); }
-#line 2097 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2093 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 162: /* script_module */
-#line 246 "src/wast-parser.y" /* yacc.c:1257 */
+#line 242 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).script_module); }
-#line 2103 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2099 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 163: /* action */
-#line 231 "src/wast-parser.y" /* yacc.c:1257 */
+#line 227 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).action); }
-#line 2109 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2105 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 164: /* assertion */
-#line 233 "src/wast-parser.y" /* yacc.c:1257 */
+#line 229 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).command); }
-#line 2115 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2111 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 165: /* cmd */
-#line 233 "src/wast-parser.y" /* yacc.c:1257 */
+#line 229 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).command); }
-#line 2121 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2117 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 166: /* cmd_list */
-#line 234 "src/wast-parser.y" /* yacc.c:1257 */
+#line 230 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).commands); }
-#line 2127 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2123 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 168: /* const_list */
-#line 235 "src/wast-parser.y" /* yacc.c:1257 */
+#line 231 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).consts); }
-#line 2133 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2129 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 169: /* script */
-#line 247 "src/wast-parser.y" /* yacc.c:1257 */
+#line 243 "src/wast-parser.y" /* yacc.c:1257 */
{ delete ((*yyvaluep).script); }
-#line 2139 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
+#line 2135 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
@@ -2427,18 +2423,18 @@ yyreduce:
switch (yyn)
{
case 2:
-#line 264 "src/wast-parser.y" /* yacc.c:1646 */
+#line 260 "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 2438 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2434 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 3:
-#line 270 "src/wast-parser.y" /* yacc.c:1646 */
+#line 266 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.text_list) = (yyvsp[-1].text_list);
TextListNode* node = new TextListNode();
@@ -2447,17 +2443,17 @@ yyreduce:
(yyval.text_list).last->next = node;
(yyval.text_list).last = node;
}
-#line 2451 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2447 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 4:
-#line 280 "src/wast-parser.y" /* yacc.c:1646 */
+#line 276 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.text_list).first = (yyval.text_list).last = nullptr; }
-#line 2457 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2453 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 6:
-#line 285 "src/wast-parser.y" /* yacc.c:1646 */
+#line 281 "src/wast-parser.y" /* yacc.c:1646 */
{
TextListNode node;
node.text = (yyvsp[0].text);
@@ -2471,139 +2467,139 @@ yyreduce:
(yyval.text).start = data;
(yyval.text).length = size;
}
-#line 2475 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2471 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 7:
-#line 303 "src/wast-parser.y" /* yacc.c:1646 */
+#line 299 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.types) = new TypeVector(); }
-#line 2481 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2477 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 8:
-#line 304 "src/wast-parser.y" /* yacc.c:1646 */
+#line 300 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.types) = (yyvsp[-1].types);
(yyval.types)->push_back((yyvsp[0].type));
}
-#line 2490 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2486 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 9:
-#line 310 "src/wast-parser.y" /* yacc.c:1646 */
+#line 306 "src/wast-parser.y" /* yacc.c:1646 */
{}
-#line 2496 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2492 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 10:
-#line 313 "src/wast-parser.y" /* yacc.c:1646 */
+#line 309 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.global) = new Global();
(yyval.global)->type = (yyvsp[0].type);
(yyval.global)->mutable_ = false;
}
-#line 2506 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2502 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 11:
-#line 318 "src/wast-parser.y" /* yacc.c:1646 */
+#line 314 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.global) = new Global();
(yyval.global)->type = (yyvsp[-1].type);
(yyval.global)->mutable_ = true;
}
-#line 2516 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2512 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 12:
-#line 326 "src/wast-parser.y" /* yacc.c:1646 */
+#line 322 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.func_sig) = (yyvsp[-1].func_sig); }
-#line 2522 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2518 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 14:
-#line 331 "src/wast-parser.y" /* yacc.c:1646 */
+#line 327 "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 2532 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2528 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 15:
-#line 336 "src/wast-parser.y" /* yacc.c:1646 */
+#line 332 "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 2543 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2539 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 16:
-#line 345 "src/wast-parser.y" /* yacc.c:1646 */
+#line 341 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.func_sig) = new FuncSignature(); }
-#line 2549 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2545 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 17:
-#line 346 "src/wast-parser.y" /* yacc.c:1646 */
+#line 342 "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 2559 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2555 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 18:
-#line 354 "src/wast-parser.y" /* yacc.c:1646 */
+#line 350 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.table) = new Table();
(yyval.table)->elem_limits = (yyvsp[-1].limits);
}
-#line 2568 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2564 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 19:
-#line 360 "src/wast-parser.y" /* yacc.c:1646 */
+#line 356 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.memory) = new Memory();
(yyval.memory)->page_limits = (yyvsp[0].limits);
}
-#line 2577 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2573 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 20:
-#line 366 "src/wast-parser.y" /* yacc.c:1646 */
+#line 362 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.limits).has_max = false;
(yyval.limits).initial = (yyvsp[0].u64);
(yyval.limits).max = 0;
}
-#line 2587 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2583 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 21:
-#line 371 "src/wast-parser.y" /* yacc.c:1646 */
+#line 367 "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 2597 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2593 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 22:
-#line 378 "src/wast-parser.y" /* yacc.c:1646 */
+#line 374 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.var) = (yyvsp[-1].var); }
-#line 2603 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2599 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 23:
-#line 384 "src/wast-parser.y" /* yacc.c:1646 */
+#line 380 "src/wast-parser.y" /* yacc.c:1646 */
{
if (Failed(parse_uint64((yyvsp[0].literal).text.start,
(yyvsp[0].literal).text.start + (yyvsp[0].literal).text.length, &(yyval.u64)))) {
@@ -2612,98 +2608,98 @@ yyreduce:
WABT_PRINTF_STRING_SLICE_ARG((yyvsp[0].literal).text));
}
}
-#line 2616 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2612 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 24:
-#line 395 "src/wast-parser.y" /* yacc.c:1646 */
+#line 391 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.literal).type = (yyvsp[0].literal).type;
DUPTEXT((yyval.literal).text, (yyvsp[0].literal).text);
}
-#line 2625 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2621 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 25:
-#line 399 "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 2634 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2630 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 26:
-#line 403 "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 2643 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2639 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 27:
-#line 410 "src/wast-parser.y" /* yacc.c:1646 */
+#line 406 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.var) = new Var((yyvsp[0].u64));
(yyval.var)->loc = (yylsp[0]);
}
-#line 2652 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2648 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 28:
-#line 414 "src/wast-parser.y" /* yacc.c:1646 */
+#line 410 "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 2663 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2659 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 29:
-#line 422 "src/wast-parser.y" /* yacc.c:1646 */
+#line 418 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.vars) = new VarVector(); }
-#line 2669 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2665 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 30:
-#line 423 "src/wast-parser.y" /* yacc.c:1646 */
+#line 419 "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 2679 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2675 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 31:
-#line 430 "src/wast-parser.y" /* yacc.c:1646 */
+#line 426 "src/wast-parser.y" /* yacc.c:1646 */
{ ZeroMemory((yyval.text)); }
-#line 2685 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2681 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 33:
-#line 434 "src/wast-parser.y" /* yacc.c:1646 */
+#line 430 "src/wast-parser.y" /* yacc.c:1646 */
{ DUPTEXT((yyval.text), (yyvsp[0].text)); }
-#line 2691 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2687 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 34:
-#line 438 "src/wast-parser.y" /* yacc.c:1646 */
+#line 434 "src/wast-parser.y" /* yacc.c:1646 */
{ ZeroMemory((yyval.text)); }
-#line 2697 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2693 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 36:
-#line 443 "src/wast-parser.y" /* yacc.c:1646 */
+#line 439 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.u64) = 0; }
-#line 2703 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2699 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 37:
-#line 444 "src/wast-parser.y" /* yacc.c:1646 */
+#line 440 "src/wast-parser.y" /* yacc.c:1646 */
{
uint64_t offset64;
if (Failed(parse_int64((yyvsp[0].text).start, (yyvsp[0].text).start + (yyvsp[0].text).length, &offset64,
@@ -2718,17 +2714,17 @@ yyreduce:
}
(yyval.u64) = static_cast<uint32_t>(offset64);
}
-#line 2722 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2718 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 38:
-#line 460 "src/wast-parser.y" /* yacc.c:1646 */
+#line 456 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.u32) = USE_NATURAL_ALIGNMENT; }
-#line 2728 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2724 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 39:
-#line 461 "src/wast-parser.y" /* yacc.c:1646 */
+#line 457 "src/wast-parser.y" /* yacc.c:1646 */
{
if (Failed(parse_int32((yyvsp[0].text).start, (yyvsp[0].text).start + (yyvsp[0].text).length, &(yyval.u32),
ParseIntType::UnsignedOnly))) {
@@ -2741,169 +2737,175 @@ yyreduce:
wast_parser_error(&(yylsp[0]), lexer, parser, "alignment must be power-of-two");
}
}
-#line 2745 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2741 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 40:
-#line 476 "src/wast-parser.y" /* yacc.c:1646 */
- { (yyval.expr_list) = join_exprs1(&(yylsp[0]), (yyvsp[0].expr)); }
-#line 2751 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 472 "src/wast-parser.y" /* yacc.c:1646 */
+ {
+ (yyval.expr_list) = new ExprList((yyvsp[0].expr));
+ (yyval.expr_list)->back().loc = (yylsp[0]);
+ }
+#line 2750 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 41:
-#line 477 "src/wast-parser.y" /* yacc.c:1646 */
- { (yyval.expr_list) = join_exprs1(&(yylsp[0]), (yyvsp[0].expr)); }
-#line 2757 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 476 "src/wast-parser.y" /* yacc.c:1646 */
+ {
+ (yyval.expr_list) = new ExprList((yyvsp[0].expr));
+ (yyval.expr_list)->back().loc = (yylsp[0]);
+ }
+#line 2759 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 43:
-#line 482 "src/wast-parser.y" /* yacc.c:1646 */
+#line 484 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new UnreachableExpr();
}
-#line 2765 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2767 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 44:
-#line 485 "src/wast-parser.y" /* yacc.c:1646 */
+#line 487 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new NopExpr();
}
-#line 2773 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2775 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 45:
-#line 488 "src/wast-parser.y" /* yacc.c:1646 */
+#line 490 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new DropExpr();
}
-#line 2781 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2783 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 46:
-#line 491 "src/wast-parser.y" /* yacc.c:1646 */
+#line 493 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new SelectExpr();
}
-#line 2789 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2791 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 47:
-#line 494 "src/wast-parser.y" /* yacc.c:1646 */
+#line 496 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new BrExpr(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2798 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2800 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 48:
-#line 498 "src/wast-parser.y" /* yacc.c:1646 */
+#line 500 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new BrIfExpr(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2807 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2809 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 49:
-#line 502 "src/wast-parser.y" /* yacc.c:1646 */
+#line 504 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new BrTableExpr((yyvsp[-1].vars), std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2816 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2818 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 50:
-#line 506 "src/wast-parser.y" /* yacc.c:1646 */
+#line 508 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new ReturnExpr();
}
-#line 2824 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2826 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 51:
-#line 509 "src/wast-parser.y" /* yacc.c:1646 */
+#line 511 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new CallExpr(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2833 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2835 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 52:
-#line 513 "src/wast-parser.y" /* yacc.c:1646 */
+#line 515 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new CallIndirectExpr(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2842 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2844 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 53:
-#line 517 "src/wast-parser.y" /* yacc.c:1646 */
+#line 519 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new GetLocalExpr(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2851 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2853 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 54:
-#line 521 "src/wast-parser.y" /* yacc.c:1646 */
+#line 523 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new SetLocalExpr(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2860 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2862 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 55:
-#line 525 "src/wast-parser.y" /* yacc.c:1646 */
+#line 527 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new TeeLocalExpr(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2869 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2871 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 56:
-#line 529 "src/wast-parser.y" /* yacc.c:1646 */
+#line 531 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new GetGlobalExpr(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2878 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2880 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 57:
-#line 533 "src/wast-parser.y" /* yacc.c:1646 */
+#line 535 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new SetGlobalExpr(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2887 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2889 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 58:
-#line 537 "src/wast-parser.y" /* yacc.c:1646 */
+#line 539 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new LoadExpr((yyvsp[-2].opcode), (yyvsp[0].u32), (yyvsp[-1].u64));
}
-#line 2895 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2897 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 59:
-#line 540 "src/wast-parser.y" /* yacc.c:1646 */
+#line 542 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new StoreExpr((yyvsp[-2].opcode), (yyvsp[0].u32), (yyvsp[-1].u64));
}
-#line 2903 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2905 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 60:
-#line 543 "src/wast-parser.y" /* yacc.c:1646 */
+#line 545 "src/wast-parser.y" /* yacc.c:1646 */
{
Const const_;
const_.loc = (yylsp[-1]);
@@ -2916,450 +2918,476 @@ yyreduce:
delete [] (yyvsp[0].literal).text.start;
(yyval.expr) = new ConstExpr(const_);
}
-#line 2920 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2922 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 61:
-#line 555 "src/wast-parser.y" /* yacc.c:1646 */
+#line 557 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new UnaryExpr((yyvsp[0].opcode));
}
-#line 2928 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2930 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 62:
-#line 558 "src/wast-parser.y" /* yacc.c:1646 */
+#line 560 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new BinaryExpr((yyvsp[0].opcode));
}
-#line 2936 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2938 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 63:
-#line 561 "src/wast-parser.y" /* yacc.c:1646 */
+#line 563 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new CompareExpr((yyvsp[0].opcode));
}
-#line 2944 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2946 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 64:
-#line 564 "src/wast-parser.y" /* yacc.c:1646 */
+#line 566 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new ConvertExpr((yyvsp[0].opcode));
}
-#line 2952 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2954 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 65:
-#line 567 "src/wast-parser.y" /* yacc.c:1646 */
+#line 569 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new CurrentMemoryExpr();
}
-#line 2960 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2962 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 66:
-#line 570 "src/wast-parser.y" /* yacc.c:1646 */
+#line 572 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new GrowMemoryExpr();
}
-#line 2968 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2970 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 67:
-#line 573 "src/wast-parser.y" /* yacc.c:1646 */
+#line 575 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new ThrowExpr(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2977 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2979 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 68:
-#line 577 "src/wast-parser.y" /* yacc.c:1646 */
+#line 579 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr) = new RethrowExpr(std::move(*(yyvsp[0].var)));
delete (yyvsp[0].var);
}
-#line 2986 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2988 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 69:
-#line 584 "src/wast-parser.y" /* yacc.c:1646 */
+#line 586 "src/wast-parser.y" /* yacc.c:1646 */
{
auto expr = new BlockExpr((yyvsp[-2].block));
expr->block->label = (yyvsp[-3].text);
CHECK_END_LABEL((yylsp[0]), expr->block->label, (yyvsp[0].text));
(yyval.expr) = expr;
}
-#line 2997 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 2999 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 70:
-#line 590 "src/wast-parser.y" /* yacc.c:1646 */
+#line 592 "src/wast-parser.y" /* yacc.c:1646 */
{
auto expr = new LoopExpr((yyvsp[-2].block));
expr->block->label = (yyvsp[-3].text);
CHECK_END_LABEL((yylsp[0]), expr->block->label, (yyvsp[0].text));
(yyval.expr) = expr;
}
-#line 3008 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3010 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 71:
-#line 596 "src/wast-parser.y" /* yacc.c:1646 */
+#line 598 "src/wast-parser.y" /* yacc.c:1646 */
{
- auto expr = new IfExpr((yyvsp[-2].block), nullptr);
+ auto expr = new IfExpr((yyvsp[-2].block));
expr->true_->label = (yyvsp[-3].text);
CHECK_END_LABEL((yylsp[0]), expr->true_->label, (yyvsp[0].text));
(yyval.expr) = expr;
}
-#line 3019 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3021 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 72:
-#line 602 "src/wast-parser.y" /* yacc.c:1646 */
+#line 604 "src/wast-parser.y" /* yacc.c:1646 */
{
- auto expr = new IfExpr((yyvsp[-5].block), (yyvsp[-2].expr_list).first);
+ auto expr = new IfExpr((yyvsp[-5].block), std::move(*(yyvsp[-2].expr_list)));
+ delete (yyvsp[-2].expr_list);
expr->true_->label = (yyvsp[-6].text);
CHECK_END_LABEL((yylsp[-3]), expr->true_->label, (yyvsp[-3].text));
CHECK_END_LABEL((yylsp[0]), expr->true_->label, (yyvsp[0].text));
(yyval.expr) = expr;
}
-#line 3031 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3034 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 73:
-#line 609 "src/wast-parser.y" /* yacc.c:1646 */
+#line 612 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyvsp[-3].block)->label = (yyvsp[-4].text);
(yyval.expr) = (yyvsp[-2].try_expr);
cast<TryExpr>((yyval.expr))->block = (yyvsp[-3].block);
CHECK_END_LABEL((yylsp[0]), (yyvsp[-3].block)->label, (yyvsp[0].text));
}
-#line 3042 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3045 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 74:
-#line 618 "src/wast-parser.y" /* yacc.c:1646 */
+#line 621 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.types) = (yyvsp[-1].types); }
-#line 3048 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3051 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 75:
-#line 621 "src/wast-parser.y" /* yacc.c:1646 */
+#line 624 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.block) = (yyvsp[0].block);
(yyval.block)->sig.insert((yyval.block)->sig.end(), (yyvsp[-1].types)->begin(), (yyvsp[-1].types)->end());
delete (yyvsp[-1].types);
}
-#line 3058 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3061 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 76:
-#line 626 "src/wast-parser.y" /* yacc.c:1646 */
+#line 629 "src/wast-parser.y" /* yacc.c:1646 */
{
- (yyval.block) = new Block();
- (yyval.block)->first = (yyvsp[0].expr_list).first;
+ (yyval.block) = new Block(std::move(*(yyvsp[0].expr_list)));
+ delete (yyvsp[0].expr_list);
}
-#line 3067 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3070 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 77:
-#line 633 "src/wast-parser.y" /* yacc.c:1646 */
+#line 636 "src/wast-parser.y" /* yacc.c:1646 */
{
- (yyval.catch_) = new Catch(std::move(*(yyvsp[-1].var)), (yyvsp[0].expr_list).first);
- (yyval.catch_)->loc = (yylsp[-2]);
+ (yyval.catch_) = new Catch(std::move(*(yyvsp[-1].var)), std::move(*(yyvsp[0].expr_list)));
delete (yyvsp[-1].var);
+ delete (yyvsp[0].expr_list);
+ (yyval.catch_)->loc = (yylsp[-2]);
}
-#line 3077 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3081 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 78:
-#line 640 "src/wast-parser.y" /* yacc.c:1646 */
+#line 644 "src/wast-parser.y" /* yacc.c:1646 */
{
- (yyval.catch_) = new Catch((yyvsp[0].expr_list).first);
+ (yyval.catch_) = new Catch(std::move(*(yyvsp[0].expr_list)));
+ delete (yyvsp[0].expr_list);
(yyval.catch_)->loc = (yylsp[-1]);
}
-#line 3086 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3091 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 81:
-#line 652 "src/wast-parser.y" /* yacc.c:1646 */
+#line 657 "src/wast-parser.y" /* yacc.c:1646 */
{
auto expr = new TryExpr();
expr->catches.push_back((yyvsp[0].catch_));
(yyval.try_expr) = expr;
}
-#line 3096 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3101 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 82:
-#line 657 "src/wast-parser.y" /* yacc.c:1646 */
+#line 662 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.try_expr) = (yyvsp[-1].try_expr);
cast<TryExpr>((yyval.try_expr))->catches.push_back((yyvsp[0].catch_));
}
-#line 3105 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3110 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 83:
-#line 664 "src/wast-parser.y" /* yacc.c:1646 */
+#line 669 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.expr_list) = (yyvsp[-1].expr_list); }
-#line 3111 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3116 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 84:
-#line 668 "src/wast-parser.y" /* yacc.c:1646 */
+#line 673 "src/wast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr_list) = join_exprs2(&(yylsp[-1]), &(yyvsp[0].expr_list), (yyvsp[-1].expr));
+ (yyval.expr_list) = (yyvsp[0].expr_list);
+ (yyval.expr_list)->push_back((yyvsp[-1].expr));
+ (yyvsp[-1].expr)->loc = (yylsp[-1]);
}
-#line 3119 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3126 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 85:
-#line 671 "src/wast-parser.y" /* yacc.c:1646 */
+#line 678 "src/wast-parser.y" /* yacc.c:1646 */
{
auto expr = new BlockExpr((yyvsp[0].block));
expr->block->label = (yyvsp[-1].text);
- (yyval.expr_list) = join_exprs1(&(yylsp[-2]), expr);
+ expr->loc = (yylsp[-2]);
+ (yyval.expr_list) = new ExprList(expr);
}
-#line 3129 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3137 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 86:
-#line 676 "src/wast-parser.y" /* yacc.c:1646 */
+#line 684 "src/wast-parser.y" /* yacc.c:1646 */
{
auto expr = new LoopExpr((yyvsp[0].block));
expr->block->label = (yyvsp[-1].text);
- (yyval.expr_list) = join_exprs1(&(yylsp[-2]), expr);
+ expr->loc = (yylsp[-2]);
+ (yyval.expr_list) = new ExprList(expr);
}
-#line 3139 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3148 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 87:
-#line 681 "src/wast-parser.y" /* yacc.c:1646 */
+#line 690 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr_list) = (yyvsp[0].expr_list);
- IfExpr* if_ = cast<IfExpr>((yyvsp[0].expr_list).last);
+ IfExpr* if_ = cast<IfExpr>(&(yyvsp[0].expr_list)->back());
if_->true_->label = (yyvsp[-1].text);
}
-#line 3149 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3158 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 88:
-#line 686 "src/wast-parser.y" /* yacc.c:1646 */
+#line 695 "src/wast-parser.y" /* yacc.c:1646 */
{
Block* block = (yyvsp[0].try_expr)->block;
block->label = (yyvsp[-1].text);
- (yyval.expr_list) = join_exprs1(&(yylsp[-2]), (yyvsp[0].try_expr));
+ (yyvsp[0].try_expr)->loc = (yylsp[-2]);
+ (yyval.expr_list) = new ExprList((yyvsp[0].try_expr));
}
-#line 3159 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3169 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 89:
-#line 694 "src/wast-parser.y" /* yacc.c:1646 */
+#line 704 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.try_expr) = (yyvsp[0].try_expr);
Block* block = (yyval.try_expr)->block;
block->sig.insert(block->sig.end(), (yyvsp[-1].types)->begin(), (yyvsp[-1].types)->end());
delete (yyvsp[-1].types);
}
-#line 3170 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3180 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 90:
-#line 700 "src/wast-parser.y" /* yacc.c:1646 */
+#line 710 "src/wast-parser.y" /* yacc.c:1646 */
{
Block* block = new Block();
- block->first = (yyvsp[-1].expr_list).first;
+ block->exprs = std::move(*(yyvsp[-1].expr_list));
+ delete (yyvsp[-1].expr_list);
(yyval.try_expr) = (yyvsp[0].try_expr);
(yyval.try_expr)->block = block;
}
-#line 3181 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3192 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 91:
-#line 709 "src/wast-parser.y" /* yacc.c:1646 */
+#line 720 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.catch_) = (yyvsp[-1].catch_);
}
-#line 3189 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3200 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 92:
-#line 712 "src/wast-parser.y" /* yacc.c:1646 */
+#line 723 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.catch_) = (yyvsp[-1].catch_);
}
-#line 3197 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3208 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 93:
-#line 718 "src/wast-parser.y" /* yacc.c:1646 */
+#line 729 "src/wast-parser.y" /* yacc.c:1646 */
{
auto expr = new TryExpr();
expr->catches.push_back((yyvsp[0].catch_));
(yyval.try_expr) = expr;
}
-#line 3207 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3218 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 94:
-#line 723 "src/wast-parser.y" /* yacc.c:1646 */
+#line 734 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.try_expr) = (yyvsp[-1].try_expr);
cast<TryExpr>((yyval.try_expr))->catches.push_back((yyvsp[0].catch_));
}
-#line 3216 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3227 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 95:
-#line 731 "src/wast-parser.y" /* yacc.c:1646 */
+#line 742 "src/wast-parser.y" /* yacc.c:1646 */
{
- IfExpr* if_ = cast<IfExpr>((yyvsp[0].expr_list).last);
+ IfExpr* if_ = cast<IfExpr>(&(yyvsp[0].expr_list)->back());
(yyval.expr_list) = (yyvsp[0].expr_list);
Block* true_ = if_->true_;
true_->sig.insert(true_->sig.end(), (yyvsp[-1].types)->begin(), (yyvsp[-1].types)->end());
delete (yyvsp[-1].types);
}
-#line 3228 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3239 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 97:
-#line 741 "src/wast-parser.y" /* yacc.c:1646 */
+#line 752 "src/wast-parser.y" /* yacc.c:1646 */
{
- Expr* expr = new IfExpr(new Block((yyvsp[-5].expr_list).first), (yyvsp[-1].expr_list).first);
- (yyval.expr_list) = join_exprs1(&(yylsp[-7]), expr);
+ Expr* expr = new IfExpr(new Block(std::move(*(yyvsp[-5].expr_list))), std::move(*(yyvsp[-1].expr_list)));
+ delete (yyvsp[-5].expr_list);
+ delete (yyvsp[-1].expr_list);
+ expr->loc = (yylsp[-7]);
+ (yyval.expr_list) = new ExprList(expr);
}
-#line 3237 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3251 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 98:
-#line 745 "src/wast-parser.y" /* yacc.c:1646 */
+#line 759 "src/wast-parser.y" /* yacc.c:1646 */
{
- Expr* expr = new IfExpr(new Block((yyvsp[-1].expr_list).first), nullptr);
- (yyval.expr_list) = join_exprs1(&(yylsp[-3]), expr);
+ Expr* expr = new IfExpr(new Block(std::move(*(yyvsp[-1].expr_list))));
+ delete (yyvsp[-1].expr_list);
+ expr->loc = (yylsp[-3]);
+ (yyval.expr_list) = new ExprList(expr);
}
-#line 3246 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3262 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 99:
-#line 749 "src/wast-parser.y" /* yacc.c:1646 */
+#line 765 "src/wast-parser.y" /* yacc.c:1646 */
{
- Expr* expr = new IfExpr(new Block((yyvsp[-5].expr_list).first), (yyvsp[-1].expr_list).first);
- (yyval.expr_list) = join_exprs2(&(yylsp[-8]), &(yyvsp[-8].expr_list), expr);
+ Expr* expr = new IfExpr(new Block(std::move(*(yyvsp[-5].expr_list))), std::move(*(yyvsp[-1].expr_list)));
+ delete (yyvsp[-5].expr_list);
+ delete (yyvsp[-1].expr_list);
+ expr->loc = (yylsp[-8]);
+ (yyval.expr_list) = (yyvsp[-8].expr_list);
+ (yyval.expr_list)->push_back(expr);
}
-#line 3255 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3275 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 100:
-#line 753 "src/wast-parser.y" /* yacc.c:1646 */
+#line 773 "src/wast-parser.y" /* yacc.c:1646 */
{
- Expr* expr = new IfExpr(new Block((yyvsp[-1].expr_list).first), nullptr);
- (yyval.expr_list) = join_exprs2(&(yylsp[-4]), &(yyvsp[-4].expr_list), expr);
+ Expr* expr = new IfExpr(new Block(std::move(*(yyvsp[-1].expr_list))));
+ delete (yyvsp[-1].expr_list);
+ expr->loc = (yylsp[-4]);
+ (yyval.expr_list) = (yyvsp[-4].expr_list);
+ (yyval.expr_list)->push_back(expr);
}
-#line 3264 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3287 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 101:
-#line 757 "src/wast-parser.y" /* yacc.c:1646 */
+#line 780 "src/wast-parser.y" /* yacc.c:1646 */
{
- Expr* expr = new IfExpr(new Block((yyvsp[-1].expr_list).first), (yyvsp[0].expr_list).first);
- (yyval.expr_list) = join_exprs2(&(yylsp[-2]), &(yyvsp[-2].expr_list), expr);
+ Expr* expr = new IfExpr(new Block(std::move(*(yyvsp[-1].expr_list))), std::move(*(yyvsp[0].expr_list)));
+ delete (yyvsp[-1].expr_list);
+ delete (yyvsp[0].expr_list);
+ expr->loc = (yylsp[-2]);
+ (yyval.expr_list) = (yyvsp[-2].expr_list);
+ (yyval.expr_list)->push_back(expr);
}
-#line 3273 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3300 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 102:
-#line 761 "src/wast-parser.y" /* yacc.c:1646 */
+#line 788 "src/wast-parser.y" /* yacc.c:1646 */
{
- Expr* expr = new IfExpr(new Block((yyvsp[0].expr_list).first), nullptr);
- (yyval.expr_list) = join_exprs2(&(yylsp[-1]), &(yyvsp[-1].expr_list), expr);
+ Expr* expr = new IfExpr(new Block(std::move(*(yyvsp[0].expr_list))));
+ delete (yyvsp[0].expr_list);
+ expr->loc = (yylsp[-1]);
+ (yyval.expr_list) = (yyvsp[-1].expr_list);
+ (yyval.expr_list)->push_back(expr);
}
-#line 3282 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3312 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 103:
-#line 768 "src/wast-parser.y" /* yacc.c:1646 */
+#line 798 "src/wast-parser.y" /* yacc.c:1646 */
{
CHECK_ALLOW_EXCEPTIONS(&(yylsp[0]), "rethrow");
}
-#line 3290 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3320 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 104:
-#line 773 "src/wast-parser.y" /* yacc.c:1646 */
+#line 803 "src/wast-parser.y" /* yacc.c:1646 */
{
CHECK_ALLOW_EXCEPTIONS(&(yylsp[0]), "throw");
}
-#line 3298 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3328 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 105:
-#line 779 "src/wast-parser.y" /* yacc.c:1646 */
+#line 809 "src/wast-parser.y" /* yacc.c:1646 */
{
CHECK_ALLOW_EXCEPTIONS(&(yylsp[0]), "try");
}
-#line 3306 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3336 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 106:
-#line 785 "src/wast-parser.y" /* yacc.c:1646 */
- { ZeroMemory((yyval.expr_list)); }
-#line 3312 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 815 "src/wast-parser.y" /* yacc.c:1646 */
+ { (yyval.expr_list) = new ExprList(); }
+#line 3342 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 107:
-#line 786 "src/wast-parser.y" /* yacc.c:1646 */
+#line 816 "src/wast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr_list).first = (yyvsp[-1].expr_list).first;
- (yyvsp[-1].expr_list).last->next = (yyvsp[0].expr_list).first;
- (yyval.expr_list).last = (yyvsp[0].expr_list).last ? (yyvsp[0].expr_list).last : (yyvsp[-1].expr_list).last;
- (yyval.expr_list).size = (yyvsp[-1].expr_list).size + (yyvsp[0].expr_list).size;
+ (yyval.expr_list) = (yyvsp[0].expr_list);
+ (yyval.expr_list)->splice((yyval.expr_list)->begin(), std::move(*(yyvsp[-1].expr_list)));
+ delete (yyvsp[-1].expr_list);
}
-#line 3323 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3352 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 108:
-#line 794 "src/wast-parser.y" /* yacc.c:1646 */
- { ZeroMemory((yyval.expr_list)); }
-#line 3329 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 823 "src/wast-parser.y" /* yacc.c:1646 */
+ { (yyval.expr_list) = new ExprList(); }
+#line 3358 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 109:
-#line 795 "src/wast-parser.y" /* yacc.c:1646 */
+#line 824 "src/wast-parser.y" /* yacc.c:1646 */
{
- (yyval.expr_list).first = (yyvsp[-1].expr_list).first;
- (yyvsp[-1].expr_list).last->next = (yyvsp[0].expr_list).first;
- (yyval.expr_list).last = (yyvsp[0].expr_list).last ? (yyvsp[0].expr_list).last : (yyvsp[-1].expr_list).last;
- (yyval.expr_list).size = (yyvsp[-1].expr_list).size + (yyvsp[0].expr_list).size;
+ (yyval.expr_list) = (yyvsp[0].expr_list);
+ (yyval.expr_list)->splice((yyval.expr_list)->begin(), std::move(*(yyvsp[-1].expr_list)));
+ delete (yyvsp[-1].expr_list);
}
-#line 3340 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3368 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 111:
-#line 808 "src/wast-parser.y" /* yacc.c:1646 */
+#line 836 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.exception) = new Exception();
(yyval.exception)->name = (yyvsp[-2].text);
(yyval.exception)->sig = std::move(*(yyvsp[-1].types));
delete (yyvsp[-1].types);
}
-#line 3351 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3379 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 112:
-#line 816 "src/wast-parser.y" /* yacc.c:1646 */
+#line 844 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.module_field) = new ExceptionModuleField((yyvsp[0].exception));
}
-#line 3359 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3387 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 113:
-#line 823 "src/wast-parser.y" /* yacc.c:1646 */
+#line 851 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.module_fields) = (yyvsp[-1].module_fields);
ModuleField* main_field = (yyval.module_fields).first;
@@ -3370,11 +3398,11 @@ yyreduce:
cast<ImportModuleField>(main_field)->import->func->name = (yyvsp[-2].text);
}
}
-#line 3374 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3402 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 114:
-#line 836 "src/wast-parser.y" /* yacc.c:1646 */
+#line 864 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new FuncModuleField((yyvsp[0].func));
field->func->decl.has_func_type = true;
@@ -3382,20 +3410,20 @@ yyreduce:
delete (yyvsp[-1].var);
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3386 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3414 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 115:
-#line 843 "src/wast-parser.y" /* yacc.c:1646 */
+#line 871 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new FuncModuleField((yyvsp[0].func));
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3395 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3423 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 116:
-#line 847 "src/wast-parser.y" /* yacc.c:1646 */
+#line 875 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new ImportModuleField((yyvsp[-2].import), (yylsp[-2]));
field->import->kind = ExternalKind::Func;
@@ -3405,53 +3433,53 @@ yyreduce:
delete (yyvsp[-1].var);
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3409 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3437 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 117:
-#line 856 "src/wast-parser.y" /* yacc.c:1646 */
+#line 884 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new ImportModuleField((yyvsp[-1].import), (yylsp[-1]));
field->import->kind = ExternalKind::Func;
field->import->func = (yyvsp[0].func);
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3420 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3448 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 118:
-#line 862 "src/wast-parser.y" /* yacc.c:1646 */
+#line 890 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new ExportModuleField((yyvsp[-1].export_), (yylsp[-1]));
field->export_->kind = ExternalKind::Func;
(yyval.module_fields).first = (yyvsp[0].module_fields).first;
(yyval.module_fields).last = (yyvsp[0].module_fields).last->next = field;
}
-#line 3431 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3459 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 119:
-#line 871 "src/wast-parser.y" /* yacc.c:1646 */
+#line 899 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func) = (yyvsp[0].func);
reverse_bindings(&(yyval.func)->decl.sig.param_types, &(yyval.func)->param_bindings);
}
-#line 3440 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3468 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 121:
-#line 879 "src/wast-parser.y" /* yacc.c:1646 */
+#line 907 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func) = (yyvsp[0].func);
(yyval.func)->decl.sig.param_types.insert((yyval.func)->decl.sig.param_types.begin(),
(yyvsp[-2].types)->begin(), (yyvsp[-2].types)->end());
delete (yyvsp[-2].types);
}
-#line 3451 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3479 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 122:
-#line 885 "src/wast-parser.y" /* yacc.c:1646 */
+#line 913 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func) = (yyvsp[0].func);
(yyval.func)->param_bindings.emplace(string_slice_to_string((yyvsp[-3].text)),
@@ -3459,48 +3487,48 @@ yyreduce:
destroy_string_slice(&(yyvsp[-3].text));
(yyval.func)->decl.sig.param_types.insert((yyval.func)->decl.sig.param_types.begin(), (yyvsp[-2].type));
}
-#line 3463 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3491 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 123:
-#line 895 "src/wast-parser.y" /* yacc.c:1646 */
+#line 923 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.func) = new Func(); }
-#line 3469 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3497 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 124:
-#line 896 "src/wast-parser.y" /* yacc.c:1646 */
+#line 924 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func) = (yyvsp[0].func);
(yyval.func)->decl.sig.result_types.insert((yyval.func)->decl.sig.result_types.begin(),
(yyvsp[-2].types)->begin(), (yyvsp[-2].types)->end());
delete (yyvsp[-2].types);
}
-#line 3480 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3508 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 125:
-#line 905 "src/wast-parser.y" /* yacc.c:1646 */
+#line 933 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func) = (yyvsp[0].func);
reverse_bindings(&(yyval.func)->decl.sig.param_types, &(yyval.func)->param_bindings);
}
-#line 3489 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3517 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 127:
-#line 913 "src/wast-parser.y" /* yacc.c:1646 */
+#line 941 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func) = (yyvsp[0].func);
(yyval.func)->decl.sig.param_types.insert((yyval.func)->decl.sig.param_types.begin(),
(yyvsp[-2].types)->begin(), (yyvsp[-2].types)->end());
delete (yyvsp[-2].types);
}
-#line 3500 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3528 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 128:
-#line 919 "src/wast-parser.y" /* yacc.c:1646 */
+#line 947 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func) = (yyvsp[0].func);
(yyval.func)->param_bindings.emplace(string_slice_to_string((yyvsp[-3].text)),
@@ -3508,50 +3536,51 @@ yyreduce:
destroy_string_slice(&(yyvsp[-3].text));
(yyval.func)->decl.sig.param_types.insert((yyval.func)->decl.sig.param_types.begin(), (yyvsp[-2].type));
}
-#line 3512 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3540 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 130:
-#line 930 "src/wast-parser.y" /* yacc.c:1646 */
+#line 958 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func) = (yyvsp[0].func);
(yyval.func)->decl.sig.result_types.insert((yyval.func)->decl.sig.result_types.begin(),
(yyvsp[-2].types)->begin(), (yyvsp[-2].types)->end());
delete (yyvsp[-2].types);
}
-#line 3523 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3551 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 131:
-#line 939 "src/wast-parser.y" /* yacc.c:1646 */
+#line 967 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func) = (yyvsp[0].func);
reverse_bindings(&(yyval.func)->local_types, &(yyval.func)->local_bindings);
}
-#line 3532 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3560 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 132:
-#line 946 "src/wast-parser.y" /* yacc.c:1646 */
+#line 974 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func) = new Func();
- (yyval.func)->first_expr = (yyvsp[0].expr_list).first;
+ (yyval.func)->exprs = std::move(*(yyvsp[0].expr_list));
+ delete (yyvsp[0].expr_list);
}
-#line 3541 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3570 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 133:
-#line 950 "src/wast-parser.y" /* yacc.c:1646 */
+#line 979 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func) = (yyvsp[0].func);
(yyval.func)->local_types.insert((yyval.func)->local_types.begin(), (yyvsp[-2].types)->begin(), (yyvsp[-2].types)->end());
delete (yyvsp[-2].types);
}
-#line 3551 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3580 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 134:
-#line 955 "src/wast-parser.y" /* yacc.c:1646 */
+#line 984 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func) = (yyvsp[0].func);
(yyval.func)->local_bindings.emplace(string_slice_to_string((yyvsp[-3].text)),
@@ -3559,48 +3588,50 @@ yyreduce:
destroy_string_slice(&(yyvsp[-3].text));
(yyval.func)->local_types.insert((yyval.func)->local_types.begin(), (yyvsp[-2].type));
}
-#line 3563 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3592 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 135:
-#line 967 "src/wast-parser.y" /* yacc.c:1646 */
+#line 996 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.expr_list) = (yyvsp[-1].expr_list);
}
-#line 3571 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3600 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 137:
-#line 974 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1003 "src/wast-parser.y" /* yacc.c:1646 */
{
auto elem_segment = new ElemSegment();
elem_segment->table_var = std::move(*(yyvsp[-3].var));
delete (yyvsp[-3].var);
- elem_segment->offset = (yyvsp[-2].expr_list).first;
+ elem_segment->offset = std::move(*(yyvsp[-2].expr_list));
+ delete (yyvsp[-2].expr_list);
elem_segment->vars = std::move(*(yyvsp[-1].vars));
delete (yyvsp[-1].vars);
(yyval.module_field) = new ElemSegmentModuleField(elem_segment, (yylsp[-4]));
}
-#line 3585 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3615 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 138:
-#line 983 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1013 "src/wast-parser.y" /* yacc.c:1646 */
{
auto elem_segment = new ElemSegment();
elem_segment->table_var.loc = (yylsp[-3]);
elem_segment->table_var.type = VarType::Index;
elem_segment->table_var.index = 0;
- elem_segment->offset = (yyvsp[-2].expr_list).first;
+ elem_segment->offset = std::move(*(yyvsp[-2].expr_list));
+ delete (yyvsp[-2].expr_list);
elem_segment->vars = std::move(*(yyvsp[-1].vars));
delete (yyvsp[-1].vars);
(yyval.module_field) = new ElemSegmentModuleField(elem_segment, (yylsp[-3]));
}
-#line 3600 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3631 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 139:
-#line 996 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1027 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.module_fields) = (yyvsp[-1].module_fields);
ModuleField* main_field = (yyval.module_fields).first;
@@ -3611,42 +3642,42 @@ yyreduce:
cast<ImportModuleField>(main_field)->import->table->name = (yyvsp[-2].text);
}
}
-#line 3615 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3646 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 140:
-#line 1009 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1040 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new TableModuleField((yyvsp[0].table));
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3624 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3655 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 141:
-#line 1013 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1044 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new ImportModuleField((yyvsp[-1].import));
field->import->kind = ExternalKind::Table;
field->import->table = (yyvsp[0].table);
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3635 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3666 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 142:
-#line 1019 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1050 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new ExportModuleField((yyvsp[-1].export_), (yylsp[-1]));
field->export_->kind = ExternalKind::Table;
(yyval.module_fields).first = (yyvsp[0].module_fields).first;
(yyval.module_fields).last = (yyvsp[0].module_fields).last->next = field;
}
-#line 3646 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3677 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 143:
-#line 1025 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1056 "src/wast-parser.y" /* yacc.c:1646 */
{
auto table = new Table();
table->elem_limits.initial = (yyvsp[-1].vars)->size();
@@ -3656,48 +3687,50 @@ yyreduce:
auto elem_segment = new ElemSegment();
elem_segment->table_var = Var(kInvalidIndex);
- elem_segment->offset = new ConstExpr(Const(Const::I32(), 0));
- elem_segment->offset->loc = (yylsp[-2]);
+ elem_segment->offset.push_back(new ConstExpr(Const(Const::I32(), 0)));
+ elem_segment->offset.back().loc = (yylsp[-2]);
elem_segment->vars = std::move(*(yyvsp[-1].vars));
delete (yyvsp[-1].vars);
auto elem_field = new ElemSegmentModuleField(elem_segment, (yylsp[-2]));
(yyval.module_fields).first = table_field;
(yyval.module_fields).last = table_field->next = elem_field;
}
-#line 3668 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3699 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 144:
-#line 1045 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1076 "src/wast-parser.y" /* yacc.c:1646 */
{
auto data_segment = new DataSegment();
data_segment->memory_var = std::move(*(yyvsp[-3].var));
delete (yyvsp[-3].var);
- data_segment->offset = (yyvsp[-2].expr_list).first;
+ data_segment->offset = std::move(*(yyvsp[-2].expr_list));
+ delete (yyvsp[-2].expr_list);
dup_text_list(&(yyvsp[-1].text_list), &data_segment->data, &data_segment->size);
destroy_text_list(&(yyvsp[-1].text_list));
(yyval.module_field) = new DataSegmentModuleField(data_segment, (yylsp[-4]));
}
-#line 3682 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3714 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 145:
-#line 1054 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1086 "src/wast-parser.y" /* yacc.c:1646 */
{
auto data_segment = new DataSegment();
data_segment->memory_var.loc = (yylsp[-3]);
data_segment->memory_var.type = VarType::Index;
data_segment->memory_var.index = 0;
- data_segment->offset = (yyvsp[-2].expr_list).first;
+ data_segment->offset = std::move(*(yyvsp[-2].expr_list));
+ delete (yyvsp[-2].expr_list);
dup_text_list(&(yyvsp[-1].text_list), &data_segment->data, &data_segment->size);
destroy_text_list(&(yyvsp[-1].text_list));
(yyval.module_field) = new DataSegmentModuleField(data_segment, (yylsp[-3]));
}
-#line 3697 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3730 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 146:
-#line 1067 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1100 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.module_fields) = (yyvsp[-1].module_fields);
ModuleField* main_field = (yyval.module_fields).first;
@@ -3708,47 +3741,47 @@ yyreduce:
cast<ImportModuleField>(main_field)->import->memory->name = (yyvsp[-2].text);
}
}
-#line 3712 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3745 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 147:
-#line 1080 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1113 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new MemoryModuleField((yyvsp[0].memory));
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3721 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3754 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 148:
-#line 1084 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1117 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new ImportModuleField((yyvsp[-1].import));
field->import->kind = ExternalKind::Memory;
field->import->memory = (yyvsp[0].memory);
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3732 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3765 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 149:
-#line 1090 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1123 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new ExportModuleField((yyvsp[-1].export_), (yylsp[-1]));
field->export_->kind = ExternalKind::Memory;
(yyval.module_fields).first = (yyvsp[0].module_fields).first;
(yyval.module_fields).last = (yyvsp[0].module_fields).last->next = field;
}
-#line 3743 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3776 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 150:
-#line 1096 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1129 "src/wast-parser.y" /* yacc.c:1646 */
{
auto data_segment = new DataSegment();
data_segment->memory_var = Var(kInvalidIndex);
- data_segment->offset = new ConstExpr(Const(Const::I32(), 0));
- data_segment->offset->loc = (yylsp[-2]);
+ data_segment->offset.push_back(new ConstExpr(Const(Const::I32(), 0)));
+ data_segment->offset.back().loc = (yylsp[-2]);
dup_text_list(&(yyvsp[-1].text_list), &data_segment->data, &data_segment->size);
destroy_text_list(&(yyvsp[-1].text_list));
auto data_field = new DataSegmentModuleField(data_segment, (yylsp[-2]));
@@ -3764,11 +3797,11 @@ yyreduce:
(yyval.module_fields).first = memory_field;
(yyval.module_fields).last = memory_field->next = data_field;
}
-#line 3768 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3801 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 151:
-#line 1119 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1152 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.module_fields) = (yyvsp[-1].module_fields);
ModuleField* main_field = (yyval.module_fields).first;
@@ -3779,43 +3812,44 @@ yyreduce:
cast<ImportModuleField>(main_field)->import->global->name = (yyvsp[-2].text);
}
}
-#line 3783 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3816 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 152:
-#line 1132 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1165 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new GlobalModuleField((yyvsp[-1].global));
- field->global->init_expr = (yyvsp[0].expr_list).first;
+ field->global->init_expr = std::move(*(yyvsp[0].expr_list));
+ delete (yyvsp[0].expr_list);
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3793 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3827 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 153:
-#line 1137 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1171 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new ImportModuleField((yyvsp[-1].import));
field->import->kind = ExternalKind::Global;
field->import->global = (yyvsp[0].global);
(yyval.module_fields).first = (yyval.module_fields).last = field;
}
-#line 3804 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3838 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 154:
-#line 1143 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1177 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new ExportModuleField((yyvsp[-1].export_), (yylsp[-1]));
field->export_->kind = ExternalKind::Global;
(yyval.module_fields).first = (yyvsp[0].module_fields).first;
(yyval.module_fields).last = (yyvsp[0].module_fields).last->next = field;
}
-#line 3815 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3849 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 155:
-#line 1154 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1188 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.import) = new Import();
(yyval.import)->kind = ExternalKind::Func;
@@ -3825,11 +3859,11 @@ yyreduce:
(yyval.import)->func->decl.type_var = std::move(*(yyvsp[-1].var));
delete (yyvsp[-1].var);
}
-#line 3829 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3863 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 156:
-#line 1163 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1197 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.import) = new Import();
(yyval.import)->kind = ExternalKind::Func;
@@ -3838,160 +3872,160 @@ yyreduce:
(yyval.import)->func->decl.sig = std::move(*(yyvsp[-1].func_sig));
delete (yyvsp[-1].func_sig);
}
-#line 3842 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3876 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 157:
-#line 1171 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1205 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.import) = new Import();
(yyval.import)->kind = ExternalKind::Table;
(yyval.import)->table = (yyvsp[-1].table);
(yyval.import)->table->name = (yyvsp[-2].text);
}
-#line 3853 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3887 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 158:
-#line 1177 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1211 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.import) = new Import();
(yyval.import)->kind = ExternalKind::Memory;
(yyval.import)->memory = (yyvsp[-1].memory);
(yyval.import)->memory->name = (yyvsp[-2].text);
}
-#line 3864 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3898 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 159:
-#line 1183 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1217 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.import) = new Import();
(yyval.import)->kind = ExternalKind::Global;
(yyval.import)->global = (yyvsp[-1].global);
(yyval.import)->global->name = (yyvsp[-2].text);
}
-#line 3875 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3909 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 160:
-#line 1189 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1223 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.import) = new Import();
(yyval.import)->kind = ExternalKind::Except;
(yyval.import)->except = (yyvsp[0].exception);
}
-#line 3885 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3919 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 161:
-#line 1197 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1231 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new ImportModuleField((yyvsp[-1].import), (yylsp[-4]));
field->import->module_name = (yyvsp[-3].text);
field->import->field_name = (yyvsp[-2].text);
(yyval.module_field) = field;
}
-#line 3896 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3930 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 162:
-#line 1206 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1240 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.import) = new Import();
(yyval.import)->module_name = (yyvsp[-2].text);
(yyval.import)->field_name = (yyvsp[-1].text);
}
-#line 3906 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3940 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 163:
-#line 1214 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1248 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.export_) = new Export();
(yyval.export_)->kind = ExternalKind::Func;
(yyval.export_)->var = std::move(*(yyvsp[-1].var));
delete (yyvsp[-1].var);
}
-#line 3917 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3951 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 164:
-#line 1220 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1254 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.export_) = new Export();
(yyval.export_)->kind = ExternalKind::Table;
(yyval.export_)->var = std::move(*(yyvsp[-1].var));
delete (yyvsp[-1].var);
}
-#line 3928 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3962 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 165:
-#line 1226 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1260 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.export_) = new Export();
(yyval.export_)->kind = ExternalKind::Memory;
(yyval.export_)->var = std::move(*(yyvsp[-1].var));
delete (yyvsp[-1].var);
}
-#line 3939 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3973 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 166:
-#line 1232 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1266 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.export_) = new Export();
(yyval.export_)->kind = ExternalKind::Global;
(yyval.export_)->var = std::move(*(yyvsp[-1].var));
delete (yyvsp[-1].var);
}
-#line 3950 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3984 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 167:
-#line 1238 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1272 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.export_) = new Export();
(yyval.export_)->kind = ExternalKind::Except;
(yyval.export_)->var = std::move(*(yyvsp[-1].var));
delete (yyvsp[-1].var);
}
-#line 3961 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3995 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 168:
-#line 1246 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1280 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new ExportModuleField((yyvsp[-1].export_), (yylsp[-3]));
field->export_->name = (yyvsp[-2].text);
(yyval.module_field) = field;
}
-#line 3971 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4005 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 169:
-#line 1254 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1288 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.export_) = new Export();
(yyval.export_)->name = (yyvsp[-1].text);
}
-#line 3980 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4014 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 170:
-#line 1264 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1298 "src/wast-parser.y" /* yacc.c:1646 */
{
auto func_type = new FuncType();
func_type->sig = std::move(*(yyvsp[-1].func_sig));
delete (yyvsp[-1].func_sig);
(yyval.module_field) = new FuncTypeModuleField(func_type, (yylsp[-2]));
}
-#line 3991 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4025 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 171:
-#line 1270 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1304 "src/wast-parser.y" /* yacc.c:1646 */
{
auto func_type = new FuncType();
func_type->name = (yyvsp[-2].text);
@@ -3999,88 +4033,88 @@ yyreduce:
delete (yyvsp[-1].func_sig);
(yyval.module_field) = new FuncTypeModuleField(func_type, (yylsp[-3]));
}
-#line 4003 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4037 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 172:
-#line 1280 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1314 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.module_field) = new StartModuleField(*(yyvsp[-1].var), (yylsp[-2]));
delete (yyvsp[-1].var);
}
-#line 4012 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4046 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 173:
-#line 1287 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1321 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4018 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4052 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 178:
-#line 1292 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1326 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4024 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4058 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 179:
-#line 1293 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1327 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4030 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4064 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 180:
-#line 1294 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1328 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4036 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4070 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 181:
-#line 1295 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1329 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4042 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4076 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 182:
-#line 1296 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1330 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4048 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4082 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 183:
-#line 1297 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1331 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4054 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4088 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 184:
-#line 1301 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1335 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.module) = new Module(); }
-#line 4060 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4094 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 186:
-#line 1306 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1340 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.module) = new Module();
check_import_ordering(&(yylsp[0]), lexer, parser, (yyval.module), (yyvsp[0].module_fields).first);
append_module_fields((yyval.module), (yyvsp[0].module_fields).first);
}
-#line 4070 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4104 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 187:
-#line 1311 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1345 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.module) = (yyvsp[-1].module);
check_import_ordering(&(yylsp[0]), lexer, parser, (yyval.module), (yyvsp[0].module_fields).first);
append_module_fields((yyval.module), (yyvsp[0].module_fields).first);
}
-#line 4080 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4114 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 188:
-#line 1319 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1353 "src/wast-parser.y" /* yacc.c:1646 */
{
if ((yyvsp[0].script_module)->type == ScriptModule::Type::Text) {
(yyval.module) = (yyvsp[0].script_module)->text;
@@ -4099,29 +4133,29 @@ yyreduce:
}
delete (yyvsp[0].script_module);
}
-#line 4103 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4137 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 190:
-#line 1347 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1381 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.var) = new Var(kInvalidIndex);
}
-#line 4111 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4145 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 191:
-#line 1350 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1384 "src/wast-parser.y" /* yacc.c:1646 */
{
StringSlice name;
DUPTEXT(name, (yyvsp[0].text));
(yyval.var) = new Var(name);
}
-#line 4121 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4155 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 192:
-#line 1358 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1392 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.script_module) = new ScriptModule();
(yyval.script_module)->type = ScriptModule::Type::Text;
@@ -4140,11 +4174,11 @@ yyreduce:
}
}
}
-#line 4144 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4178 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 193:
-#line 1376 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1410 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.script_module) = new ScriptModule();
(yyval.script_module)->type = ScriptModule::Type::Binary;
@@ -4153,11 +4187,11 @@ yyreduce:
dup_text_list(&(yyvsp[-1].text_list), &(yyval.script_module)->binary.data, &(yyval.script_module)->binary.size);
destroy_text_list(&(yyvsp[-1].text_list));
}
-#line 4157 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4191 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 194:
-#line 1384 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1418 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.script_module) = new ScriptModule();
(yyval.script_module)->type = ScriptModule::Type::Quoted;
@@ -4166,11 +4200,11 @@ yyreduce:
dup_text_list(&(yyvsp[-1].text_list), &(yyval.script_module)->quoted.data, &(yyval.script_module)->quoted.size);
destroy_text_list(&(yyvsp[-1].text_list));
}
-#line 4170 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4204 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 195:
-#line 1395 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1429 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.action) = new Action();
(yyval.action)->loc = (yylsp[-4]);
@@ -4182,11 +4216,11 @@ yyreduce:
(yyval.action)->invoke->args = std::move(*(yyvsp[-1].consts));
delete (yyvsp[-1].consts);
}
-#line 4186 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4220 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 196:
-#line 1406 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1440 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.action) = new Action();
(yyval.action)->loc = (yylsp[-3]);
@@ -4195,128 +4229,128 @@ yyreduce:
(yyval.action)->type = ActionType::Get;
(yyval.action)->name = (yyvsp[-1].text);
}
-#line 4199 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4233 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 197:
-#line 1417 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1451 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new AssertMalformedCommand((yyvsp[-2].script_module), (yyvsp[-1].text));
}
-#line 4207 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4241 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 198:
-#line 1420 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1454 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new AssertInvalidCommand((yyvsp[-2].script_module), (yyvsp[-1].text));
}
-#line 4215 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4249 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 199:
-#line 1423 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1457 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new AssertUnlinkableCommand((yyvsp[-2].script_module), (yyvsp[-1].text));
}
-#line 4223 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4257 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 200:
-#line 1426 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1460 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new AssertUninstantiableCommand((yyvsp[-2].script_module), (yyvsp[-1].text));
}
-#line 4231 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4265 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 201:
-#line 1429 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1463 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new AssertReturnCommand((yyvsp[-2].action), (yyvsp[-1].consts));
}
-#line 4239 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4273 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 202:
-#line 1432 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1466 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new AssertReturnCanonicalNanCommand((yyvsp[-1].action));
}
-#line 4247 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4281 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 203:
-#line 1435 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1469 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new AssertReturnArithmeticNanCommand((yyvsp[-1].action));
}
-#line 4255 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4289 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 204:
-#line 1438 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1472 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new AssertTrapCommand((yyvsp[-2].action), (yyvsp[-1].text));
}
-#line 4263 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4297 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 205:
-#line 1441 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1475 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new AssertExhaustionCommand((yyvsp[-2].action), (yyvsp[-1].text));
}
-#line 4271 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4305 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 206:
-#line 1447 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1481 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new ActionCommand((yyvsp[0].action));
}
-#line 4279 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4313 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 208:
-#line 1451 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1485 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new ModuleCommand((yyvsp[0].module));
}
-#line 4287 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4321 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 209:
-#line 1454 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1488 "src/wast-parser.y" /* yacc.c:1646 */
{
auto* command = new RegisterCommand((yyvsp[-2].text), *(yyvsp[-1].var));
delete (yyvsp[-1].var);
command->var.loc = (yylsp[-1]);
(yyval.command) = command;
}
-#line 4298 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4332 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 210:
-#line 1462 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1496 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.commands) = new CommandPtrVector();
(yyval.commands)->emplace_back((yyvsp[0].command));
}
-#line 4307 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4341 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 211:
-#line 1466 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1500 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.commands) = (yyvsp[-1].commands);
(yyval.commands)->emplace_back((yyvsp[0].command));
}
-#line 4316 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4350 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 212:
-#line 1473 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1507 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.const_).loc = (yylsp[-2]);
if (Failed(parse_const((yyvsp[-2].type), (yyvsp[-1].literal).type, (yyvsp[-1].literal).text.start,
@@ -4327,34 +4361,34 @@ yyreduce:
}
delete [] (yyvsp[-1].literal).text.start;
}
-#line 4331 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4365 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 213:
-#line 1485 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1519 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.consts) = new ConstVector(); }
-#line 4337 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4371 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 214:
-#line 1486 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1520 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.consts) = (yyvsp[-1].consts);
(yyval.consts)->push_back((yyvsp[0].const_));
}
-#line 4346 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4380 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 215:
-#line 1493 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1527 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.script) = new Script();
}
-#line 4354 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4388 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 216:
-#line 1496 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1530 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.script) = new Script();
(yyval.script)->commands = std::move(*(yyvsp[0].commands));
@@ -4419,26 +4453,26 @@ yyreduce:
}
}
}
-#line 4423 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4457 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 217:
-#line 1560 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1594 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.script) = new Script();
(yyval.script)->commands.emplace_back(new ModuleCommand((yyvsp[0].module)));
}
-#line 4432 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4466 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 218:
-#line 1569 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1603 "src/wast-parser.y" /* yacc.c:1646 */
{ parser->script = (yyvsp[0].script); }
-#line 4438 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4472 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
-#line 4442 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4476 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -4673,45 +4707,8 @@ yyreturn:
#endif
return yyresult;
}
-#line 1572 "src/wast-parser.y" /* yacc.c:1906 */
-
-
-void append_expr_list(ExprList* expr_list, ExprList* expr) {
- if (!expr->first)
- return;
- if (expr_list->last)
- expr_list->last->next = expr->first;
- else
- expr_list->first = expr->first;
- expr_list->last = expr->last;
- expr_list->size += expr->size;
-}
+#line 1606 "src/wast-parser.y" /* yacc.c:1906 */
-void append_expr(ExprList* expr_list, Expr* expr) {
- if (expr_list->last)
- expr_list->last->next = expr;
- else
- expr_list->first = expr;
- expr_list->last = expr;
- expr_list->size++;
-}
-
-ExprList join_exprs1(Location* loc, Expr* expr1) {
- ExprList result;
- ZeroMemory(result);
- append_expr(&result, expr1);
- expr1->loc = *loc;
- return result;
-}
-
-ExprList join_exprs2(Location* loc, ExprList* expr1, Expr* expr2) {
- ExprList result;
- ZeroMemory(result);
- append_expr_list(&result, expr1);
- append_expr(&result, expr2);
- expr2->loc = *loc;
- return result;
-}
Result parse_const(Type type,
LiteralType literal_type,
diff --git a/src/prebuilt/wast-parser-gen.hh b/src/prebuilt/wast-parser-gen.hh
index ffde5533..b2761beb 100644
--- a/src/prebuilt/wast-parser-gen.hh
+++ b/src/prebuilt/wast-parser-gen.hh
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.0.2. */
+/* A Bison parser, made by GNU Bison 3.0.4. */
/* Bison interface for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/src/validator.cc b/src/validator.cc
index 60c3943c..ba2cfb79 100644
--- a/src/validator.cc
+++ b/src/validator.cc
@@ -105,7 +105,7 @@ class Validator {
void CheckAssertReturnNanType(const Location* loc,
Type actual,
const char* desc);
- void CheckExprList(const Location* loc, const Expr* first);
+ void CheckExprList(const Location* loc, const ExprList& exprs);
void CheckHasMemory(const Location* loc, Opcode opcode);
void CheckBlockSig(const Location* loc,
Opcode opcode,
@@ -117,7 +117,7 @@ class Validator {
void CheckFunc(const Location* loc, const Func* func);
void PrintConstExprError(const Location* loc, const char* desc);
void CheckConstInitExpr(const Location* loc,
- const Expr* expr,
+ const ExprList& expr,
Type expected_type,
const char* desc);
void CheckGlobal(const Location* loc, const Global* global);
@@ -395,11 +395,9 @@ void Validator::CheckAssertReturnNanType(const Location* loc,
}
}
-void Validator::CheckExprList(const Location* loc, const Expr* first) {
- if (first) {
- for (const Expr* expr = first; expr; expr = expr->next)
- CheckExpr(expr);
- }
+void Validator::CheckExprList(const Location* loc, const ExprList& exprs) {
+ for (const Expr& expr : exprs)
+ CheckExpr(&expr);
}
void Validator::CheckHasMemory(const Location* loc, Opcode opcode) {
@@ -431,7 +429,7 @@ void Validator::CheckExpr(const Expr* expr) {
auto block_expr = cast<BlockExpr>(expr);
CheckBlockSig(&block_expr->loc, Opcode::Block, &block_expr->block->sig);
typechecker_.OnBlock(&block_expr->block->sig);
- CheckExprList(&block_expr->loc, block_expr->block->first);
+ CheckExprList(&block_expr->loc, block_expr->block->exprs);
typechecker_.OnEnd();
break;
}
@@ -512,8 +510,8 @@ void Validator::CheckExpr(const Expr* expr) {
auto if_expr = cast<IfExpr>(expr);
CheckBlockSig(&if_expr->loc, Opcode::If, &if_expr->true_->sig);
typechecker_.OnIf(&if_expr->true_->sig);
- CheckExprList(&if_expr->loc, if_expr->true_->first);
- if (if_expr->false_) {
+ CheckExprList(&if_expr->loc, if_expr->true_->exprs);
+ if (!if_expr->false_.empty()) {
typechecker_.OnElse();
CheckExprList(&if_expr->loc, if_expr->false_);
}
@@ -534,7 +532,7 @@ void Validator::CheckExpr(const Expr* expr) {
auto loop_expr = cast<LoopExpr>(expr);
CheckBlockSig(&loop_expr->loc, Opcode::Loop, &loop_expr->block->sig);
typechecker_.OnLoop(&loop_expr->block->sig);
- CheckExprList(&loop_expr->loc, loop_expr->block->first);
+ CheckExprList(&loop_expr->loc, loop_expr->block->exprs);
typechecker_.OnEnd();
break;
}
@@ -598,7 +596,7 @@ void Validator::CheckExpr(const Expr* expr) {
CheckBlockSig(&try_expr->loc, Opcode::Try, &try_expr->block->sig);
typechecker_.OnTryBlock(&try_expr->block->sig);
- CheckExprList(&try_expr->loc, try_expr->block->first);
+ CheckExprList(&try_expr->loc, try_expr->block->exprs);
if (try_expr->catches.empty())
PrintError(&try_expr->loc, "TryBlock: doesn't have any catch clauses");
@@ -616,7 +614,7 @@ void Validator::CheckExpr(const Expr* expr) {
typechecker_.OnCatch(&except->sig);
}
}
- CheckExprList(&catch_->loc, catch_->first);
+ CheckExprList(&catch_->loc, catch_->exprs);
}
typechecker_.OnEnd();
try_contexts_.pop_back();
@@ -658,7 +656,7 @@ void Validator::CheckFunc(const Location* loc, const Func* func) {
expr_loc_ = loc;
typechecker_.BeginFunction(&func->decl.sig.result_types);
- CheckExprList(loc, func->first_expr);
+ CheckExprList(loc, func->exprs);
typechecker_.EndFunction();
current_func_ = nullptr;
}
@@ -671,16 +669,19 @@ void Validator::PrintConstExprError(const Location* loc, const char* desc) {
}
void Validator::CheckConstInitExpr(const Location* loc,
- const Expr* expr,
+ const ExprList& exprs,
Type expected_type,
const char* desc) {
Type type = Type::Void;
- if (expr) {
- if (expr->next) {
+ if (!exprs.empty()) {
+ if (exprs.size() > 1) {
PrintConstExprError(loc, desc);
return;
}
+ const Expr* expr = &exprs.front();
+ loc = &expr->loc;
+
switch (expr->type) {
case ExprType::Const:
type = cast<ConstExpr>(expr)->const_.type;
@@ -714,7 +715,7 @@ void Validator::CheckConstInitExpr(const Location* loc,
}
}
- CheckType(expr ? &expr->loc : loc, type, expected_type, desc);
+ CheckType(loc, type, expected_type, desc);
}
void Validator::CheckGlobal(const Location* loc, const Global* global) {
diff --git a/src/wast-parser-lexer-shared.h b/src/wast-parser-lexer-shared.h
index 56367ab7..fa36bd4d 100644
--- a/src/wast-parser-lexer-shared.h
+++ b/src/wast-parser-lexer-shared.h
@@ -32,12 +32,6 @@
namespace wabt {
-struct ExprList {
- Expr* first;
- Expr* last;
- size_t size;
-};
-
struct TextListNode {
StringSlice text;
struct TextListNode* next;
@@ -77,7 +71,7 @@ union Token {
Exception* exception;
Export* export_;
Expr* expr;
- ExprList expr_list;
+ ExprList* expr_list;
Func* func;
FuncSignature* func_sig;
FuncType* func_type;
diff --git a/src/wast-parser.y b/src/wast-parser.y
index 249c4e57..e0b624e0 100644
--- a/src/wast-parser.y
+++ b/src/wast-parser.y
@@ -115,10 +115,6 @@ static bool is_power_of_two(uint32_t x) {
return x && ((x & (x - 1)) == 0);
}
-static ExprList join_exprs1(Location* loc, Expr* expr1);
-static ExprList join_exprs2(Location* loc, ExprList* expr1, Expr* expr2);
-static void append_expr_list(ExprList* expr_list, ExprList* expr);
-
static Result parse_const(Type type,
LiteralType literal_type,
const char* s,
@@ -235,7 +231,7 @@ class BinaryErrorHandlerModule : public BinaryErrorHandler {
%destructor { delete $$; } <consts>
%destructor { delete $$; } <export_>
%destructor { delete $$; } <expr>
-%destructor { DestroyExprList($$.first); } <expr_list>
+%destructor { delete $$; } <expr_list>
%destructor { destroy_module_field_list(&$$); } <module_fields>
%destructor { delete $$; } <func>
%destructor { delete $$; } <func_sig>
@@ -473,8 +469,14 @@ align_opt :
;
instr :
- plain_instr { $$ = join_exprs1(&@1, $1); }
- | block_instr { $$ = join_exprs1(&@1, $1); }
+ plain_instr {
+ $$ = new ExprList($1);
+ $$->back().loc = @1;
+ }
+ | block_instr {
+ $$ = new ExprList($1);
+ $$->back().loc = @1;
+ }
| expr
;
@@ -594,13 +596,14 @@ block_instr :
$$ = expr;
}
| IF labeling_opt block END labeling_opt {
- auto expr = new IfExpr($3, nullptr);
+ auto expr = new IfExpr($3);
expr->true_->label = $2;
CHECK_END_LABEL(@5, expr->true_->label, $5);
$$ = expr;
}
| IF labeling_opt block ELSE labeling_opt instr_list END labeling_opt {
- auto expr = new IfExpr($3, $6.first);
+ auto expr = new IfExpr($3, std::move(*$6));
+ delete $6;
expr->true_->label = $2;
CHECK_END_LABEL(@5, expr->true_->label, $5);
CHECK_END_LABEL(@8, expr->true_->label, $8);
@@ -624,21 +627,23 @@ block :
delete $1;
}
| instr_list {
- $$ = new Block();
- $$->first = $1.first;
+ $$ = new Block(std::move(*$1));
+ delete $1;
}
;
plain_catch :
CATCH var instr_list {
- $$ = new Catch(std::move(*$2), $3.first);
- $$->loc = @1;
+ $$ = new Catch(std::move(*$2), std::move(*$3));
delete $2;
+ delete $3;
+ $$->loc = @1;
}
;
plain_catch_all :
CATCH_ALL instr_list {
- $$ = new Catch($2.first);
+ $$ = new Catch(std::move(*$2));
+ delete $2;
$$->loc = @1;
}
;
@@ -666,27 +671,32 @@ expr :
expr1 :
plain_instr expr_list {
- $$ = join_exprs2(&@1, &$2, $1);
+ $$ = $2;
+ $$->push_back($1);
+ $1->loc = @1;
}
| BLOCK labeling_opt block {
auto expr = new BlockExpr($3);
expr->block->label = $2;
- $$ = join_exprs1(&@1, expr);
+ expr->loc = @1;
+ $$ = new ExprList(expr);
}
| LOOP labeling_opt block {
auto expr = new LoopExpr($3);
expr->block->label = $2;
- $$ = join_exprs1(&@1, expr);
+ expr->loc = @1;
+ $$ = new ExprList(expr);
}
| IF labeling_opt if_block {
$$ = $3;
- IfExpr* if_ = cast<IfExpr>($3.last);
+ IfExpr* if_ = cast<IfExpr>(&$3->back());
if_->true_->label = $2;
}
| try_check labeling_opt try_ {
Block* block = $3->block;
block->label = $2;
- $$ = join_exprs1(&@1, $3);
+ $3->loc = @1;
+ $$ = new ExprList($3);
}
;
@@ -699,7 +709,8 @@ try_ :
}
| instr_list catch_sexp_list {
Block* block = new Block();
- block->first = $1.first;
+ block->exprs = std::move(*$1);
+ delete $1;
$$ = $2;
$$->block = block;
}
@@ -729,7 +740,7 @@ catch_sexp_list :
if_block :
block_sig if_block {
- IfExpr* if_ = cast<IfExpr>($2.last);
+ IfExpr* if_ = cast<IfExpr>(&$2->back());
$$ = $2;
Block* true_ = if_->true_;
true_->sig.insert(true_->sig.end(), $1->begin(), $1->end());
@@ -739,28 +750,47 @@ if_block :
;
if_ :
LPAR THEN instr_list RPAR LPAR ELSE instr_list RPAR {
- Expr* expr = new IfExpr(new Block($3.first), $7.first);
- $$ = join_exprs1(&@1, expr);
+ Expr* expr = new IfExpr(new Block(std::move(*$3)), std::move(*$7));
+ delete $3;
+ delete $7;
+ expr->loc = @1;
+ $$ = new ExprList(expr);
}
| LPAR THEN instr_list RPAR {
- Expr* expr = new IfExpr(new Block($3.first), nullptr);
- $$ = join_exprs1(&@1, expr);
+ Expr* expr = new IfExpr(new Block(std::move(*$3)));
+ delete $3;
+ expr->loc = @1;
+ $$ = new ExprList(expr);
}
| expr LPAR THEN instr_list RPAR LPAR ELSE instr_list RPAR {
- Expr* expr = new IfExpr(new Block($4.first), $8.first);
- $$ = join_exprs2(&@1, &$1, expr);
+ Expr* expr = new IfExpr(new Block(std::move(*$4)), std::move(*$8));
+ delete $4;
+ delete $8;
+ expr->loc = @1;
+ $$ = $1;
+ $$->push_back(expr);
}
| expr LPAR THEN instr_list RPAR {
- Expr* expr = new IfExpr(new Block($4.first), nullptr);
- $$ = join_exprs2(&@1, &$1, expr);
+ Expr* expr = new IfExpr(new Block(std::move(*$4)));
+ delete $4;
+ expr->loc = @1;
+ $$ = $1;
+ $$->push_back(expr);
}
| expr expr expr {
- Expr* expr = new IfExpr(new Block($2.first), $3.first);
- $$ = join_exprs2(&@1, &$1, expr);
+ Expr* expr = new IfExpr(new Block(std::move(*$2)), std::move(*$3));
+ delete $2;
+ delete $3;
+ expr->loc = @1;
+ $$ = $1;
+ $$->push_back(expr);
}
| expr expr {
- Expr* expr = new IfExpr(new Block($2.first), nullptr);
- $$ = join_exprs2(&@1, &$1, expr);
+ Expr* expr = new IfExpr(new Block(std::move(*$2)));
+ delete $2;
+ expr->loc = @1;
+ $$ = $1;
+ $$->push_back(expr);
}
;
@@ -782,21 +812,19 @@ try_check :
;
instr_list :
- /* empty */ { ZeroMemory($$); }
+ /* empty */ { $$ = new ExprList(); }
| instr instr_list {
- $$.first = $1.first;
- $1.last->next = $2.first;
- $$.last = $2.last ? $2.last : $1.last;
- $$.size = $1.size + $2.size;
+ $$ = $2;
+ $$->splice($$->begin(), std::move(*$1));
+ delete $1;
}
;
expr_list :
- /* empty */ { ZeroMemory($$); }
+ /* empty */ { $$ = new ExprList(); }
| expr expr_list {
- $$.first = $1.first;
- $1.last->next = $2.first;
- $$.last = $2.last ? $2.last : $1.last;
- $$.size = $1.size + $2.size;
+ $$ = $2;
+ $$->splice($$->begin(), std::move(*$1));
+ delete $1;
}
const_expr :
@@ -945,7 +973,8 @@ func_body :
func_body1 :
instr_list {
$$ = new Func();
- $$->first_expr = $1.first;
+ $$->exprs = std::move(*$1);
+ delete $1;
}
| LPAR LOCAL value_type_list RPAR func_body1 {
$$ = $5;
@@ -975,7 +1004,8 @@ elem :
auto elem_segment = new ElemSegment();
elem_segment->table_var = std::move(*$3);
delete $3;
- elem_segment->offset = $4.first;
+ elem_segment->offset = std::move(*$4);
+ delete $4;
elem_segment->vars = std::move(*$5);
delete $5;
$$ = new ElemSegmentModuleField(elem_segment, @2);
@@ -985,7 +1015,8 @@ elem :
elem_segment->table_var.loc = @2;
elem_segment->table_var.type = VarType::Index;
elem_segment->table_var.index = 0;
- elem_segment->offset = $3.first;
+ elem_segment->offset = std::move(*$3);
+ delete $3;
elem_segment->vars = std::move(*$4);
delete $4;
$$ = new ElemSegmentModuleField(elem_segment, @2);
@@ -1031,8 +1062,8 @@ table_fields :
auto elem_segment = new ElemSegment();
elem_segment->table_var = Var(kInvalidIndex);
- elem_segment->offset = new ConstExpr(Const(Const::I32(), 0));
- elem_segment->offset->loc = @3;
+ elem_segment->offset.push_back(new ConstExpr(Const(Const::I32(), 0)));
+ elem_segment->offset.back().loc = @3;
elem_segment->vars = std::move(*$4);
delete $4;
auto elem_field = new ElemSegmentModuleField(elem_segment, @3);
@@ -1046,7 +1077,8 @@ data :
auto data_segment = new DataSegment();
data_segment->memory_var = std::move(*$3);
delete $3;
- data_segment->offset = $4.first;
+ data_segment->offset = std::move(*$4);
+ delete $4;
dup_text_list(&$5, &data_segment->data, &data_segment->size);
destroy_text_list(&$5);
$$ = new DataSegmentModuleField(data_segment, @2);
@@ -1056,7 +1088,8 @@ data :
data_segment->memory_var.loc = @2;
data_segment->memory_var.type = VarType::Index;
data_segment->memory_var.index = 0;
- data_segment->offset = $3.first;
+ data_segment->offset = std::move(*$3);
+ delete $3;
dup_text_list(&$4, &data_segment->data, &data_segment->size);
destroy_text_list(&$4);
$$ = new DataSegmentModuleField(data_segment, @2);
@@ -1096,8 +1129,8 @@ memory_fields :
| LPAR DATA text_list_opt RPAR {
auto data_segment = new DataSegment();
data_segment->memory_var = Var(kInvalidIndex);
- data_segment->offset = new ConstExpr(Const(Const::I32(), 0));
- data_segment->offset->loc = @2;
+ data_segment->offset.push_back(new ConstExpr(Const(Const::I32(), 0)));
+ data_segment->offset.back().loc = @2;
dup_text_list(&$3, &data_segment->data, &data_segment->size);
destroy_text_list(&$3);
auto data_field = new DataSegmentModuleField(data_segment, @2);
@@ -1131,7 +1164,8 @@ global :
global_fields :
global_type const_expr {
auto field = new GlobalModuleField($1);
- field->global->init_expr = $2.first;
+ field->global->init_expr = std::move(*$2);
+ delete $2;
$$.first = $$.last = field;
}
| inline_import global_type {
@@ -1571,43 +1605,6 @@ script_start :
%%
-void append_expr_list(ExprList* expr_list, ExprList* expr) {
- if (!expr->first)
- return;
- if (expr_list->last)
- expr_list->last->next = expr->first;
- else
- expr_list->first = expr->first;
- expr_list->last = expr->last;
- expr_list->size += expr->size;
-}
-
-void append_expr(ExprList* expr_list, Expr* expr) {
- if (expr_list->last)
- expr_list->last->next = expr;
- else
- expr_list->first = expr;
- expr_list->last = expr;
- expr_list->size++;
-}
-
-ExprList join_exprs1(Location* loc, Expr* expr1) {
- ExprList result;
- ZeroMemory(result);
- append_expr(&result, expr1);
- expr1->loc = *loc;
- return result;
-}
-
-ExprList join_exprs2(Location* loc, ExprList* expr1, Expr* expr2) {
- ExprList result;
- ZeroMemory(result);
- append_expr_list(&result, expr1);
- append_expr(&result, expr2);
- expr2->loc = *loc;
- return result;
-}
-
Result parse_const(Type type,
LiteralType literal_type,
const char* s,
diff --git a/src/wat-writer.cc b/src/wat-writer.cc
index 5f5cd05c..044e8d77 100644
--- a/src/wat-writer.cc
+++ b/src/wat-writer.cc
@@ -135,8 +135,8 @@ class WatWriter {
const char* start_text);
void WriteConst(const Const* const_);
void WriteExpr(const Expr* expr);
- void WriteExprList(const Expr* first);
- void WriteInitExpr(const Expr* expr);
+ void WriteExprList(const ExprList& exprs);
+ void WriteInitExpr(const ExprList& expr);
void WriteTypeBindings(const char* prefix,
const Func* func,
const TypeVector& types,
@@ -167,8 +167,8 @@ class WatWriter {
void FlushExprTree(const ExprTree& expr_tree);
void FlushExprTreeVector(const std::vector<ExprTree>&);
void FlushExprTreeStack();
- void WriteFoldedExpr(const Expr* first);
- void WriteFoldedExprList(const Expr* first);
+ void WriteFoldedExpr(const Expr*);
+ void WriteFoldedExprList(const ExprList&);
void BuildExportMaps();
void WriteInlineExport(const Export* export_);
@@ -426,7 +426,7 @@ void WatWriter::WriteBlock(LabelType label_type,
const Block* block,
const char* start_text) {
WriteBeginBlock(label_type, block, start_text);
- WriteExprList(block->first);
+ WriteExprList(block->exprs);
WriteEndBlock();
}
@@ -548,8 +548,8 @@ void WatWriter::WriteExpr(const Expr* expr) {
auto if_expr = cast<IfExpr>(expr);
WriteBeginBlock(LabelType::If, if_expr->true_,
Opcode::If_Opcode.GetName());
- WriteExprList(if_expr->true_->first);
- if (if_expr->false_) {
+ WriteExprList(if_expr->true_->exprs);
+ if (!if_expr->false_.empty()) {
Dedent();
WritePutsSpace(Opcode::Else_Opcode.GetName());
Indent();
@@ -632,7 +632,7 @@ void WatWriter::WriteExpr(const Expr* expr) {
auto try_ = cast<TryExpr>(expr);
WriteBeginBlock(LabelType::Try, try_->block,
Opcode::Try_Opcode.GetName());
- WriteExprList(try_->block->first);
+ WriteExprList(try_->block->exprs);
for (const Catch* catch_ : try_->catches) {
Dedent();
if (catch_->IsCatchAll()) {
@@ -643,7 +643,7 @@ void WatWriter::WriteExpr(const Expr* expr) {
}
Indent();
label_stack_.back().label_type = LabelType::Catch;
- WriteExprList(catch_->first);
+ WriteExprList(catch_->exprs);
}
WriteEndBlock();
break;
@@ -664,10 +664,10 @@ void WatWriter::WriteExpr(const Expr* expr) {
}
}
-void WatWriter::WriteExprList(const Expr* first) {
+void WatWriter::WriteExprList(const ExprList& exprs) {
WABT_TRACE(WriteExprList);
- for (const Expr* expr = first; expr; expr = expr->next)
- WriteExpr(expr);
+ for (const Expr& expr : exprs)
+ WriteExpr(&expr);
}
Label* WatWriter::GetLabel(const Var* var) {
@@ -818,10 +818,10 @@ void WatWriter::WriteFoldedExpr(const Expr* expr) {
}
}
-void WatWriter::WriteFoldedExprList(const Expr* first) {
+void WatWriter::WriteFoldedExprList(const ExprList& exprs) {
WABT_TRACE(WriteFoldedExprList);
- for (const Expr* expr = first; expr; expr = expr->next)
- WriteFoldedExpr(expr);
+ for (const Expr& expr : exprs)
+ WriteFoldedExpr(&expr);
}
void WatWriter::PushExpr(const Expr* expr,
@@ -851,7 +851,7 @@ void WatWriter::FlushExprTree(const ExprTree& expr_tree) {
WritePuts("(", NextChar::None);
WriteBeginBlock(LabelType::Block, cast<BlockExpr>(expr_tree.expr)->block,
Opcode::Block_Opcode.GetName());
- WriteFoldedExprList(cast<BlockExpr>(expr_tree.expr)->block->first);
+ WriteFoldedExprList(cast<BlockExpr>(expr_tree.expr)->block->exprs);
FlushExprTreeStack();
WriteCloseNewline();
break;
@@ -860,7 +860,7 @@ void WatWriter::FlushExprTree(const ExprTree& expr_tree) {
WritePuts("(", NextChar::None);
WriteBeginBlock(LabelType::Loop, cast<LoopExpr>(expr_tree.expr)->block,
Opcode::Loop_Opcode.GetName());
- WriteFoldedExprList(cast<LoopExpr>(expr_tree.expr)->block->first);
+ WriteFoldedExprList(cast<LoopExpr>(expr_tree.expr)->block->exprs);
FlushExprTreeStack();
WriteCloseNewline();
break;
@@ -872,10 +872,10 @@ void WatWriter::FlushExprTree(const ExprTree& expr_tree) {
Opcode::If_Opcode.GetName());
FlushExprTreeVector(expr_tree.children);
WriteOpenNewline("then");
- WriteFoldedExprList(if_expr->true_->first);
+ WriteFoldedExprList(if_expr->true_->exprs);
FlushExprTreeStack();
WriteCloseNewline();
- if (if_expr->false_) {
+ if (!if_expr->false_.empty()) {
WriteOpenNewline("else");
WriteFoldedExprList(if_expr->false_);
FlushExprTreeStack();
@@ -890,7 +890,7 @@ void WatWriter::FlushExprTree(const ExprTree& expr_tree) {
WritePuts("(", NextChar::None);
WriteBeginBlock(LabelType::Try, try_->block,
Opcode::Try_Opcode.GetName());
- WriteFoldedExprList(try_->block->first);
+ WriteFoldedExprList(try_->block->exprs);
FlushExprTreeStack();
for (const Catch* catch_ : try_->catches) {
WritePuts("(", NextChar::None);
@@ -902,7 +902,7 @@ void WatWriter::FlushExprTree(const ExprTree& expr_tree) {
}
Indent();
label_stack_.back().label_type = LabelType::Catch;
- WriteFoldedExprList(catch_->first);
+ WriteFoldedExprList(catch_->exprs);
FlushExprTreeStack();
WriteCloseNewline();
}
@@ -933,10 +933,10 @@ void WatWriter::FlushExprTreeStack() {
FlushExprTreeVector(stack_copy);
}
-void WatWriter::WriteInitExpr(const Expr* expr) {
- if (expr) {
+void WatWriter::WriteInitExpr(const ExprList& expr) {
+ if (!expr.empty()) {
WritePuts("(", NextChar::None);
- WriteExpr(expr);
+ WriteExprList(expr);
/* clear the next char, so we don't write a newline after the expr */
next_char_ = NextChar::None;
WritePuts(")", NextChar::Space);
@@ -996,10 +996,10 @@ void WatWriter::WriteFunc(const Module* module, const Func* func) {
func->decl.sig.result_types);
current_func_ = func;
if (options_->fold_exprs) {
- WriteFoldedExprList(func->first_expr);
+ WriteFoldedExprList(func->exprs);
FlushExprTreeStack();
} else {
- WriteExprList(func->first_expr);
+ WriteExprList(func->exprs);
}
current_func_ = nullptr;
WriteCloseNewline();