summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/apply-names.cc6
-rw-r--r--src/binary-reader-ir.cc26
-rw-r--r--src/binary-reader-logging.cc5
-rw-r--r--src/binary-reader-logging.h6
-rw-r--r--src/binary-reader-nop.h8
-rw-r--r--src/binary-reader-objdump.cc21
-rw-r--r--src/binary-reader.cc33
-rw-r--r--src/binary-reader.h10
-rw-r--r--src/binary-writer.cc30
-rw-r--r--src/c-writer.cc7
-rw-r--r--src/interp/binary-reader-interp.cc23
-rw-r--r--src/ir.h17
-rw-r--r--src/lexer-keywords.txt1
-rw-r--r--src/opcode.def5
-rw-r--r--src/prebuilt/lexer-keywords.cc1780
-rw-r--r--src/resolve-names.cc7
-rw-r--r--src/token.def35
-rw-r--r--src/validator.cc6
-rw-r--r--src/wast-parser.cc51
-rw-r--r--src/wast-parser.h3
-rw-r--r--src/wat-writer.cc16
21 files changed, 1129 insertions, 967 deletions
diff --git a/src/apply-names.cc b/src/apply-names.cc
index e331ff4b..8f17db27 100644
--- a/src/apply-names.cc
+++ b/src/apply-names.cc
@@ -425,8 +425,10 @@ Result NameApplier::VisitElemSegment(Index elem_segment_index,
ElemSegment* segment) {
CHECK_RESULT(UseNameForTableVar(&segment->table_var));
CHECK_RESULT(visitor_.VisitExprList(segment->offset));
- for (Var& var : segment->vars) {
- CHECK_RESULT(UseNameForFuncVar(&var));
+ for (ElemExpr& elem_expr : segment->elem_exprs) {
+ if (elem_expr.kind == ElemExprKind::RefFunc) {
+ CHECK_RESULT(UseNameForFuncVar(&elem_expr.var));
+ }
}
return Result::Ok;
}
diff --git a/src/binary-reader-ir.cc b/src/binary-reader-ir.cc
index 9d71f70b..dd7efeee 100644
--- a/src/binary-reader-ir.cc
+++ b/src/binary-reader-ir.cc
@@ -201,8 +201,10 @@ class BinaryReaderIR : public BinaryReaderNop {
Result BeginElemSegment(Index index, Index table_index, bool passive) override;
Result BeginElemSegmentInitExpr(Index index) override;
Result EndElemSegmentInitExpr(Index index) override;
- Result OnElemSegmentFunctionIndexCount(Index index, Index count) override;
- Result OnElemSegmentFunctionIndex(Index index, Index func_index) override;
+ Result OnElemSegmentElemExprCount(Index index, Index count) override;
+ Result OnElemSegmentElemExpr_RefNull(Index segment_index) override;
+ Result OnElemSegmentElemExpr_RefFunc(Index segment_index,
+ Index func_index) override;
Result OnDataSegmentCount(Index count) override;
Result BeginDataSegment(Index index, Index memory_index, bool passive) override;
@@ -1003,23 +1005,27 @@ Result BinaryReaderIR::EndElemSegmentInitExpr(Index index) {
return Result::Ok;
}
-Result BinaryReaderIR::OnElemSegmentFunctionIndexCount(Index index,
- Index count) {
+Result BinaryReaderIR::OnElemSegmentElemExprCount(Index index, Index count) {
assert(index == module_->elem_segments.size() - 1);
ElemSegment* segment = module_->elem_segments[index];
WABT_TRY
- segment->vars.reserve(count);
+ segment->elem_exprs.reserve(count);
WABT_CATCH_BAD_ALLOC
return Result::Ok;
}
-Result BinaryReaderIR::OnElemSegmentFunctionIndex(Index segment_index,
- Index func_index) {
+Result BinaryReaderIR::OnElemSegmentElemExpr_RefNull(Index segment_index) {
assert(segment_index == module_->elem_segments.size() - 1);
ElemSegment* segment = module_->elem_segments[segment_index];
- segment->vars.emplace_back();
- Var* var = &segment->vars.back();
- *var = Var(func_index, GetLocation());
+ segment->elem_exprs.emplace_back();
+ return Result::Ok;
+}
+
+Result BinaryReaderIR::OnElemSegmentElemExpr_RefFunc(Index segment_index,
+ Index func_index) {
+ assert(segment_index == module_->elem_segments.size() - 1);
+ ElemSegment* segment = module_->elem_segments[segment_index];
+ segment->elem_exprs.emplace_back(Var(func_index, GetLocation()));
return Result::Ok;
}
diff --git a/src/binary-reader-logging.cc b/src/binary-reader-logging.cc
index 3755e343..eca57540 100644
--- a/src/binary-reader-logging.cc
+++ b/src/binary-reader-logging.cc
@@ -726,8 +726,9 @@ DEFINE_INDEX(OnElemSegmentCount)
DEFINE_INDEX_INDEX_BOOL(BeginElemSegment, "index", "table_index", "passive")
DEFINE_INDEX(BeginElemSegmentInitExpr)
DEFINE_INDEX(EndElemSegmentInitExpr)
-DEFINE_INDEX_INDEX(OnElemSegmentFunctionIndexCount, "index", "count")
-DEFINE_INDEX_INDEX(OnElemSegmentFunctionIndex, "index", "func_index")
+DEFINE_INDEX_INDEX(OnElemSegmentElemExprCount, "index", "count")
+DEFINE_INDEX(OnElemSegmentElemExpr_RefNull)
+DEFINE_INDEX_INDEX(OnElemSegmentElemExpr_RefFunc, "index", "func_index")
DEFINE_INDEX(EndElemSegment)
DEFINE_END(EndElemSection)
diff --git a/src/binary-reader-logging.h b/src/binary-reader-logging.h
index fd5cd69d..e3428fca 100644
--- a/src/binary-reader-logging.h
+++ b/src/binary-reader-logging.h
@@ -224,8 +224,10 @@ class BinaryReaderLogging : public BinaryReaderDelegate {
Result BeginElemSegment(Index index, Index table_index, bool passive) override;
Result BeginElemSegmentInitExpr(Index index) override;
Result EndElemSegmentInitExpr(Index index) override;
- Result OnElemSegmentFunctionIndexCount(Index index, Index count) override;
- Result OnElemSegmentFunctionIndex(Index index, Index func_index) override;
+ Result OnElemSegmentElemExprCount(Index index, Index count) override;
+ Result OnElemSegmentElemExpr_RefNull(Index segment_index) override;
+ Result OnElemSegmentElemExpr_RefFunc(Index segment_index,
+ Index func_index) override;
Result EndElemSegment(Index index) override;
Result EndElemSection() override;
diff --git a/src/binary-reader-nop.h b/src/binary-reader-nop.h
index e9e6ea9a..b02848b8 100644
--- a/src/binary-reader-nop.h
+++ b/src/binary-reader-nop.h
@@ -291,10 +291,14 @@ class BinaryReaderNop : public BinaryReaderDelegate {
}
Result BeginElemSegmentInitExpr(Index index) override { return Result::Ok; }
Result EndElemSegmentInitExpr(Index index) override { return Result::Ok; }
- Result OnElemSegmentFunctionIndexCount(Index index, Index count) override {
+ Result OnElemSegmentElemExprCount(Index index, Index count) override {
return Result::Ok;
}
- Result OnElemSegmentFunctionIndex(Index index, Index func_index) override {
+ Result OnElemSegmentElemExpr_RefNull(Index segment_index) override {
+ return Result::Ok;
+ }
+ Result OnElemSegmentElemExpr_RefFunc(Index segment_index,
+ Index func_index) override {
return Result::Ok;
}
Result EndElemSegment(Index index) override { return Result::Ok; }
diff --git a/src/binary-reader-objdump.cc b/src/binary-reader-objdump.cc
index 1928a788..dc3e3b1c 100644
--- a/src/binary-reader-objdump.cc
+++ b/src/binary-reader-objdump.cc
@@ -772,9 +772,10 @@ class BinaryReaderObjdump : public BinaryReaderObjdumpBase {
Result BeginElemSegment(Index index,
Index table_index,
bool passive) override;
- Result OnElemSegmentFunctionIndexCount(Index index, Index count) override;
- Result OnElemSegmentFunctionIndex(Index segment_index,
- Index func_index) override;
+ Result OnElemSegmentElemExprCount(Index index, Index count) override;
+ Result OnElemSegmentElemExpr_RefNull(Index segment_index) override;
+ Result OnElemSegmentElemExpr_RefFunc(Index segment_index,
+ Index func_index) override;
Result BeginDataSection(Offset size) override {
in_data_section_ = true;
@@ -1190,8 +1191,14 @@ Result BinaryReaderObjdump::OnExport(Index index,
return Result::Ok;
}
-Result BinaryReaderObjdump::OnElemSegmentFunctionIndex(Index segment_index,
- Index func_index) {
+Result BinaryReaderObjdump::OnElemSegmentElemExpr_RefNull(Index segment_index) {
+ PrintDetails(" - elem[%" PRIindex "] = null", elem_offset_ + elem_index_);
+ elem_index_++;
+ return Result::Ok;
+}
+
+Result BinaryReaderObjdump::OnElemSegmentElemExpr_RefFunc(Index segment_index,
+ Index func_index) {
PrintDetails(" - elem[%" PRIindex "] = func[%" PRIindex "]",
elem_offset_ + elem_index_, func_index);
auto name = GetFunctionName(func_index);
@@ -1215,8 +1222,8 @@ Result BinaryReaderObjdump::BeginElemSegment(Index index,
return Result::Ok;
}
-Result BinaryReaderObjdump::OnElemSegmentFunctionIndexCount(Index index,
- Index count) {
+Result BinaryReaderObjdump::OnElemSegmentElemExprCount(Index index,
+ Index count) {
PrintDetails(" - segment[%" PRIindex "] table=%" PRIindex " count=%" PRIindex,
index, table_index_, count);
PrintInitExpr(elem_init_expr_);
diff --git a/src/binary-reader.cc b/src/binary-reader.cc
index ce016aa8..8ac8ea76 100644
--- a/src/binary-reader.cc
+++ b/src/binary-reader.cc
@@ -2085,14 +2085,31 @@ Result BinaryReader::ReadElemSection(Offset section_size) {
CALLBACK(EndElemSegmentInitExpr, i);
}
- Index num_function_indexes;
- CHECK_RESULT(
- ReadCount(&num_function_indexes, "elem segment function index count"));
- CALLBACK(OnElemSegmentFunctionIndexCount, i, num_function_indexes);
- for (Index j = 0; j < num_function_indexes; ++j) {
- Index func_index;
- CHECK_RESULT(ReadIndex(&func_index, "elem segment function index"));
- CALLBACK(OnElemSegmentFunctionIndex, i, func_index);
+ Index num_elem_exprs;
+ CHECK_RESULT(ReadCount(&num_elem_exprs, "elem expr count"));
+ CALLBACK(OnElemSegmentElemExprCount, i, num_elem_exprs);
+ for (Index j = 0; j < num_elem_exprs; ++j) {
+ if (flags == SegmentFlags::Passive) {
+ Opcode opcode;
+ CHECK_RESULT(ReadOpcode(&opcode, "elem expr opcode"));
+ if (opcode == Opcode::RefNull) {
+ CALLBACK(OnElemSegmentElemExpr_RefNull, i);
+ } else if (opcode == Opcode::RefFunc) {
+ Index func_index;
+ CHECK_RESULT(ReadIndex(&func_index, "elem expr func index"));
+ CALLBACK(OnElemSegmentElemExpr_RefFunc, i, func_index);
+ } else {
+ PrintError(
+ "expected ref.null or ref.func in passive element segment");
+ }
+ CHECK_RESULT(ReadOpcode(&opcode, "opcode"));
+ ERROR_UNLESS(opcode == Opcode::End,
+ "expected END opcode after element expression");
+ } else {
+ Index func_index;
+ CHECK_RESULT(ReadIndex(&func_index, "elem expr func index"));
+ CALLBACK(OnElemSegmentElemExpr_RefFunc, i, func_index);
+ }
}
CALLBACK(EndElemSegment, i);
}
diff --git a/src/binary-reader.h b/src/binary-reader.h
index d3751fae..a0ecbfed 100644
--- a/src/binary-reader.h
+++ b/src/binary-reader.h
@@ -254,7 +254,8 @@ class BinaryReaderDelegate {
virtual Result OnRethrowExpr() = 0;
virtual Result OnReturnExpr() = 0;
virtual Result OnReturnCallExpr(Index func_index) = 0;
- virtual Result OnReturnCallIndirectExpr(Index sig_index, Index table_index) = 0;
+ virtual Result OnReturnCallIndirectExpr(Index sig_index,
+ Index table_index) = 0;
virtual Result OnSelectExpr() = 0;
virtual Result OnStoreExpr(Opcode opcode,
uint32_t alignment_log2,
@@ -280,9 +281,10 @@ class BinaryReaderDelegate {
bool passive) = 0;
virtual Result BeginElemSegmentInitExpr(Index index) = 0;
virtual Result EndElemSegmentInitExpr(Index index) = 0;
- virtual Result OnElemSegmentFunctionIndexCount(Index index, Index count) = 0;
- virtual Result OnElemSegmentFunctionIndex(Index segment_index,
- Index func_index) = 0;
+ virtual Result OnElemSegmentElemExprCount(Index index, Index count) = 0;
+ virtual Result OnElemSegmentElemExpr_RefNull(Index segment_index) = 0;
+ virtual Result OnElemSegmentElemExpr_RefFunc(Index segment_index,
+ Index func_index) = 0;
virtual Result EndElemSegment(Index index) = 0;
virtual Result EndElemSection() = 0;
diff --git a/src/binary-writer.cc b/src/binary-writer.cc
index c0e00d96..1148e729 100644
--- a/src/binary-writer.cc
+++ b/src/binary-writer.cc
@@ -1024,11 +1024,31 @@ Result BinaryWriter::WriteModule() {
stream_->WriteU8(static_cast<uint8_t>(SegmentFlags::IndexZero));
WriteInitExpr(segment->offset);
}
- WriteU32Leb128(stream_, segment->vars.size(), "num function indices");
- for (const Var& var : segment->vars) {
- Index index = module_->GetFuncIndex(var);
- WriteU32Leb128WithReloc(index, "function index",
- RelocType::FuncIndexLEB);
+ WriteU32Leb128(stream_, segment->elem_exprs.size(), "num elem exprs");
+ if (segment->passive) {
+ for (const ElemExpr& elem_expr : segment->elem_exprs) {
+ switch (elem_expr.kind) {
+ case ElemExprKind::RefNull:
+ WriteOpcode(stream_, Opcode::RefNull);
+ break;
+
+ case ElemExprKind::RefFunc:
+ WriteOpcode(stream_, Opcode::RefFunc);
+ WriteU32Leb128WithReloc(module_->GetFuncIndex(elem_expr.var),
+ "elem expr function index",
+ RelocType::FuncIndexLEB);
+ break;
+ }
+ WriteOpcode(stream_, Opcode::End);
+ }
+ } else {
+ // Active segment.
+ for (const ElemExpr& elem_expr : segment->elem_exprs) {
+ assert(elem_expr.kind == ElemExprKind::RefFunc);
+ WriteU32Leb128WithReloc(module_->GetFuncIndex(elem_expr.var),
+ "elem expr function index",
+ RelocType::FuncIndexLEB);
+ }
}
}
EndSection();
diff --git a/src/c-writer.cc b/src/c-writer.cc
index 0ba530e0..d840170e 100644
--- a/src/c-writer.cc
+++ b/src/c-writer.cc
@@ -1142,8 +1142,11 @@ void CWriter::WriteElemInitializers() {
Write(";", Newline());
size_t i = 0;
- for (const Var& var : elem_segment->vars) {
- const Func* func = module_->GetFunc(var);
+ for (const ElemExpr& elem_expr : elem_segment->elem_exprs) {
+ // We don't support the bulk-memory proposal here, so we know that we
+ // don't have any passive segments (where ref.null can be used).
+ assert(elem_expr.kind == ElemExprKind::RefFunc);
+ const Func* func = module_->GetFunc(elem_expr.var);
Index func_type_index = module_->GetFuncTypeIndex(func->decl.type_var);
Write(ExternalRef(table->name), ".data[offset + ", i,
diff --git a/src/interp/binary-reader-interp.cc b/src/interp/binary-reader-interp.cc
index 94cf479c..7a5ecc00 100644
--- a/src/interp/binary-reader-interp.cc
+++ b/src/interp/binary-reader-interp.cc
@@ -203,10 +203,10 @@ class BinaryReaderInterp : public BinaryReaderNop {
wabt::Result OnSimdShuffleOpExpr(wabt::Opcode opcode, v128 value) override;
wabt::Result EndElemSegmentInitExpr(Index index) override;
- wabt::Result OnElemSegmentFunctionIndexCount(Index index,
- Index count) override;
- wabt::Result OnElemSegmentFunctionIndex(Index index,
- Index func_index) override;
+ wabt::Result OnElemSegmentElemExprCount(Index index, Index count) override;
+ wabt::Result OnElemSegmentElemExpr_RefNull(Index segment_index) override;
+ wabt::Result OnElemSegmentElemExpr_RefFunc(Index segment_index,
+ Index func_index) override;
wabt::Result OnDataSegmentData(Index index,
const void* data,
@@ -976,8 +976,8 @@ wabt::Result BinaryReaderInterp::EndElemSegmentInitExpr(Index index) {
return wabt::Result::Ok;
}
-wabt::Result BinaryReaderInterp::OnElemSegmentFunctionIndexCount(Index index,
- Index count) {
+wabt::Result BinaryReaderInterp::OnElemSegmentElemExprCount(Index index,
+ Index count) {
assert(module_->table_index != kInvalidIndex);
Table* table = env_->GetTable(module_->table_index);
// Check both cases, as table_offset_ + count may overflow.
@@ -991,8 +991,15 @@ wabt::Result BinaryReaderInterp::OnElemSegmentFunctionIndexCount(Index index,
return wabt::Result::Ok;
}
-wabt::Result BinaryReaderInterp::OnElemSegmentFunctionIndex(Index index,
- Index func_index) {
+wabt::Result BinaryReaderInterp::OnElemSegmentElemExpr_RefNull(
+ Index segment_index) {
+ // TODO(binji): implement
+ return wabt::Result::Error;
+}
+
+wabt::Result BinaryReaderInterp::OnElemSegmentElemExpr_RefFunc(
+ Index index,
+ Index func_index) {
Index max_func_index = func_index_mapping_.size();
if (func_index >= max_func_index) {
PrintError("invalid func_index: %" PRIindex " (max %" PRIindex ")",
diff --git a/src/ir.h b/src/ir.h
index eb014024..a7f973f2 100644
--- a/src/ir.h
+++ b/src/ir.h
@@ -546,6 +546,21 @@ struct Table {
Type elem_type;
};
+enum class ElemExprKind {
+ RefNull,
+ RefFunc,
+};
+
+struct ElemExpr {
+ ElemExpr() : kind(ElemExprKind::RefNull) {}
+ explicit ElemExpr(Var var) : kind(ElemExprKind::RefFunc), var(var) {}
+
+ ElemExprKind kind;
+ Var var; // Only used when kind == RefFunc.
+};
+
+typedef std::vector<ElemExpr> ElemExprVector;
+
struct ElemSegment {
explicit ElemSegment(string_view name) : name(name.to_string()) {}
@@ -553,7 +568,7 @@ struct ElemSegment {
Var table_var;
bool passive = false;
ExprList offset;
- VarVector vars;
+ ElemExprVector elem_exprs;
};
struct Memory {
diff --git a/src/lexer-keywords.txt b/src/lexer-keywords.txt
index f6250320..ce395e17 100644
--- a/src/lexer-keywords.txt
+++ b/src/lexer-keywords.txt
@@ -441,6 +441,7 @@ offset, TokenType::Offset
param, TokenType::Param
passive, TokenType::Passive
quote, TokenType::Quote
+ref.func, TokenType::RefFunc, Opcode::RefFunc
ref.is_null, TokenType::RefIsNull, Opcode::RefIsNull
ref.null, TokenType::RefNull, Opcode::RefNull
register, TokenType::Register
diff --git a/src/opcode.def b/src/opcode.def
index 9b46fb5a..62d2528d 100644
--- a/src/opcode.def
+++ b/src/opcode.def
@@ -247,7 +247,7 @@ WABT_OPCODE(___, I32, I32, I32, 0, 0xfc, 0x0c, TableInit, "table.init")
WABT_OPCODE(___, ___, ___, ___, 0, 0xfc, 0x0d, ElemDrop, "elem.drop")
WABT_OPCODE(___, I32, I32, I32, 0, 0xfc, 0x0e, TableCopy, "table.copy")
-/* Referene types (--enable-reference-types) */
+/* Reference types (--enable-reference-types) */
WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x25, TableGet, "table.get")
WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x26, TableSet, "table.set")
WABT_OPCODE(___, ___, ___, ___, 0, 0xfc, 0x0f, TableGrow, "table.grow")
@@ -255,6 +255,9 @@ WABT_OPCODE(___, ___, ___, ___, 0, 0xfc, 0x10, TableSize, "table.size")
WABT_OPCODE(___, ___, ___, ___, 0, 0, 0xd0, RefNull, "ref.null")
WABT_OPCODE(___, ___, ___, ___, 0, 0, 0xd1, RefIsNull, "ref.is_null")
+/* Not supported by any proposal currently; needed for passive element segments */
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0xd2, RefFunc, "ref.func")
+
/* Simd opcodes (--enable-simd) */
WABT_OPCODE(V128, I32, ___, ___, 16, 0xfd, 0x00, V128Load, "v128.load")
WABT_OPCODE(___, I32, V128, ___, 16, 0xfd, 0x01, V128Store, "v128.store")
diff --git a/src/prebuilt/lexer-keywords.cc b/src/prebuilt/lexer-keywords.cc
index 861bee6c..d553bfa4 100644
--- a/src/prebuilt/lexer-keywords.cc
+++ b/src/prebuilt/lexer-keywords.cc
@@ -46,7 +46,7 @@ struct TokenInfo {
Opcode opcode;
};
};
-/* maximum key range = 1717, duplicates = 0 */
+/* maximum key range = 1841, duplicates = 0 */
class Perfect_Hash
{
@@ -61,32 +61,32 @@ Perfect_Hash::hash (const char *str, size_t len)
{
static unsigned short asso_values[] =
{
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 11, 45, 1736, 150,
- 8, 100, 7, 344, 163, 220, 369, 440, 21, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 8, 36, 30, 24, 74,
- 16, 13, 7, 236, 554, 10, 22, 7, 48, 8,
- 26, 53, 467, 545, 44, 7, 7, 9, 115, 7,
- 372, 459, 44, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736,
- 1736, 1736, 1736, 1736, 1736, 1736, 1736
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 9, 43, 1864, 19,
+ 10, 143, 9, 312, 202, 146, 282, 485, 102, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 9, 9, 63, 12, 9,
+ 22, 15, 9, 317, 554, 12, 27, 9, 44, 10,
+ 26, 63, 423, 467, 46, 9, 9, 11, 86, 39,
+ 402, 563, 17, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864,
+ 1864, 1864, 1864, 1864, 1864, 1864, 1864
};
unsigned int hval = len;
@@ -150,21 +150,21 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{
enum
{
- TOTAL_KEYWORDS = 498,
+ TOTAL_KEYWORDS = 499,
MIN_WORD_LENGTH = 2,
MAX_WORD_LENGTH = 28,
- MIN_HASH_VALUE = 19,
- MAX_HASH_VALUE = 1735
+ MIN_HASH_VALUE = 23,
+ MAX_HASH_VALUE = 1863
};
static struct TokenInfo wordlist[] =
{
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
+ {""}, {""}, {""}, {""}, {""},
#line 423 "src/lexer-keywords.txt"
{"if", TokenType::If, Opcode::If},
- {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""},
#line 127 "src/lexer-keywords.txt"
{"f64", Type::F64},
#line 438 "src/lexer-keywords.txt"
@@ -182,37 +182,53 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
#line 42 "src/lexer-keywords.txt"
{"elem", TokenType::Elem},
{""}, {""}, {""},
+#line 150 "src/lexer-keywords.txt"
+ {"func", TokenType::Func},
+ {""},
+#line 462 "src/lexer-keywords.txt"
+ {"table", TokenType::Table},
+ {""},
#line 114 "src/lexer-keywords.txt"
{"f64.lt", TokenType::Compare, Opcode::F64Lt},
#line 64 "src/lexer-keywords.txt"
{"f32.lt", TokenType::Compare, Opcode::F32Lt},
- {""}, {""}, {""},
+#line 463 "src/lexer-keywords.txt"
+ {"then", TokenType::Then},
#line 45 "src/lexer-keywords.txt"
{"event", TokenType::Event},
+ {""}, {""}, {""}, {""},
+#line 33 "src/lexer-keywords.txt"
+ {"br", TokenType::Br, Opcode::Br},
+ {""},
#line 44 "src/lexer-keywords.txt"
{"end", TokenType::End, Opcode::End},
{""},
-#line 462 "src/lexer-keywords.txt"
- {"then", TokenType::Then},
- {""}, {""}, {""},
#line 112 "src/lexer-keywords.txt"
{"f64.le", TokenType::Compare, Opcode::F64Le},
#line 62 "src/lexer-keywords.txt"
{"f32.le", TokenType::Compare, Opcode::F32Le},
-#line 461 "src/lexer-keywords.txt"
- {"table", TokenType::Table},
-#line 39 "src/lexer-keywords.txt"
- {"data", TokenType::Data},
-#line 454 "src/lexer-keywords.txt"
- {"start", TokenType::Start},
- {""}, {""}, {""},
+ {""},
+#line 98 "src/lexer-keywords.txt"
+ {"f64.abs", TokenType::Unary, Opcode::F64Abs},
+#line 47 "src/lexer-keywords.txt"
+ {"f32.abs", TokenType::Unary, Opcode::F32Abs},
+#line 125 "src/lexer-keywords.txt"
+ {"f64.sub", TokenType::Binary, Opcode::F64Sub},
+#line 74 "src/lexer-keywords.txt"
+ {"f32.sub", TokenType::Binary, Opcode::F32Sub},
+ {""},
+#line 370 "src/lexer-keywords.txt"
+ {"i64.sub", TokenType::Binary, Opcode::I64Sub},
+#line 251 "src/lexer-keywords.txt"
+ {"i32.sub", TokenType::Binary, Opcode::I32Sub},
+ {""},
#line 352 "src/lexer-keywords.txt"
{"i64.lt_s", TokenType::Compare, Opcode::I64LtS},
#line 234 "src/lexer-keywords.txt"
{"i32.lt_s", TokenType::Compare, Opcode::I32LtS},
+ {""},
#line 437 "src/lexer-keywords.txt"
{"module", TokenType::Module},
- {""},
#line 353 "src/lexer-keywords.txt"
{"i64.lt_u", TokenType::Compare, Opcode::I64LtU},
#line 235 "src/lexer-keywords.txt"
@@ -221,58 +237,65 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{"i64.le_s", TokenType::Compare, Opcode::I64LeS},
#line 227 "src/lexer-keywords.txt"
{"i32.le_s", TokenType::Compare, Opcode::I32LeS},
-#line 33 "src/lexer-keywords.txt"
- {"br", TokenType::Br, Opcode::Br},
{""},
+#line 149 "src/lexer-keywords.txt"
+ {"funcref", Type::Funcref},
#line 344 "src/lexer-keywords.txt"
{"i64.le_u", TokenType::Compare, Opcode::I64LeU},
#line 228 "src/lexer-keywords.txt"
{"i32.le_u", TokenType::Compare, Opcode::I32LeU},
-#line 149 "src/lexer-keywords.txt"
- {"funcref", Type::Funcref},
- {""},
+ {""}, {""},
+#line 448 "src/lexer-keywords.txt"
+ {"result", TokenType::Result},
+#line 460 "src/lexer-keywords.txt"
+ {"table.set", TokenType::TableSet, Opcode::TableSet},
#line 359 "src/lexer-keywords.txt"
{"i64.rem_s", TokenType::Binary, Opcode::I64RemS},
#line 241 "src/lexer-keywords.txt"
{"i32.rem_s", TokenType::Binary, Opcode::I32RemS},
- {""},
-#line 447 "src/lexer-keywords.txt"
- {"result", TokenType::Result},
+#line 329 "src/lexer-keywords.txt"
+ {"i64.ctz", TokenType::Unary, Opcode::I64Ctz},
+#line 216 "src/lexer-keywords.txt"
+ {"i32.ctz", TokenType::Unary, Opcode::I32Ctz},
#line 360 "src/lexer-keywords.txt"
{"i64.rem_u", TokenType::Binary, Opcode::I64RemU},
#line 242 "src/lexer-keywords.txt"
{"i32.rem_u", TokenType::Binary, Opcode::I32RemU},
+#line 455 "src/lexer-keywords.txt"
+ {"start", TokenType::Start},
+#line 39 "src/lexer-keywords.txt"
+ {"data", TokenType::Data},
#line 453 "src/lexer-keywords.txt"
- {"shared", TokenType::Shared},
-#line 98 "src/lexer-keywords.txt"
- {"f64.abs", TokenType::Unary, Opcode::F64Abs},
-#line 47 "src/lexer-keywords.txt"
- {"f32.abs", TokenType::Unary, Opcode::F32Abs},
-#line 125 "src/lexer-keywords.txt"
- {"f64.sub", TokenType::Binary, Opcode::F64Sub},
-#line 74 "src/lexer-keywords.txt"
- {"f32.sub", TokenType::Binary, Opcode::F32Sub},
-#line 440 "src/lexer-keywords.txt"
- {"offset", TokenType::Offset},
-#line 370 "src/lexer-keywords.txt"
- {"i64.sub", TokenType::Binary, Opcode::I64Sub},
-#line 251 "src/lexer-keywords.txt"
- {"i32.sub", TokenType::Binary, Opcode::I32Sub},
- {""},
-#line 452 "src/lexer-keywords.txt"
{"select", TokenType::Select, Opcode::Select},
-#line 459 "src/lexer-keywords.txt"
- {"table.set", TokenType::TableSet, Opcode::TableSet},
+ {""},
+#line 35 "src/lexer-keywords.txt"
+ {"call", TokenType::Call, Opcode::Call},
+#line 461 "src/lexer-keywords.txt"
+ {"table.size", TokenType::TableSize, Opcode::TableSize},
#line 99 "src/lexer-keywords.txt"
{"f64.add", TokenType::Binary, Opcode::F64Add},
#line 48 "src/lexer-keywords.txt"
{"f32.add", TokenType::Binary, Opcode::F32Add},
- {""},
+#line 440 "src/lexer-keywords.txt"
+ {"offset", TokenType::Offset},
#line 288 "src/lexer-keywords.txt"
{"i64.add", TokenType::Binary, Opcode::I64Add},
#line 184 "src/lexer-keywords.txt"
{"i32.add", TokenType::Binary, Opcode::I32Add},
+#line 459 "src/lexer-keywords.txt"
+ {"table.init", TokenType::TableInit, Opcode::TableInit},
{""},
+#line 289 "src/lexer-keywords.txt"
+ {"i64.and", TokenType::Binary, Opcode::I64And},
+#line 185 "src/lexer-keywords.txt"
+ {"i32.and", TokenType::Binary, Opcode::I32And},
+#line 429 "src/lexer-keywords.txt"
+ {"local", TokenType::Local},
+ {""}, {""},
+#line 116 "src/lexer-keywords.txt"
+ {"f64.min", TokenType::Binary, Opcode::F64Min},
+#line 66 "src/lexer-keywords.txt"
+ {"f32.min", TokenType::Binary, Opcode::F32Min},
#line 120 "src/lexer-keywords.txt"
{"f64.ne", TokenType::Compare, Opcode::F64Ne},
#line 70 "src/lexer-keywords.txt"
@@ -282,63 +305,32 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{"i64.ne", TokenType::Compare, Opcode::I64Ne},
#line 237 "src/lexer-keywords.txt"
{"i32.ne", TokenType::Compare, Opcode::I32Ne},
- {""}, {""},
-#line 289 "src/lexer-keywords.txt"
- {"i64.and", TokenType::Binary, Opcode::I64And},
-#line 185 "src/lexer-keywords.txt"
- {"i32.and", TokenType::Binary, Opcode::I32And},
- {""},
-#line 116 "src/lexer-keywords.txt"
- {"f64.min", TokenType::Binary, Opcode::F64Min},
-#line 66 "src/lexer-keywords.txt"
- {"f32.min", TokenType::Binary, Opcode::F32Min},
-#line 150 "src/lexer-keywords.txt"
- {"func", TokenType::Func},
-#line 458 "src/lexer-keywords.txt"
- {"table.init", TokenType::TableInit, Opcode::TableInit},
- {""}, {""}, {""},
-#line 451 "src/lexer-keywords.txt"
+#line 452 "src/lexer-keywords.txt"
{"return", TokenType::Return, Opcode::Return},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
-#line 148 "src/lexer-keywords.txt"
- {"f64x2", TokenType::F64X2},
- {""}, {""},
-#line 391 "src/lexer-keywords.txt"
- {"i64x2", TokenType::I64X2},
+#line 427 "src/lexer-keywords.txt"
+ {"local.set", TokenType::LocalSet, Opcode::LocalSet},
+ {""}, {""}, {""},
+#line 32 "src/lexer-keywords.txt"
+ {"br_table", TokenType::BrTable, Opcode::BrTable},
+#line 327 "src/lexer-keywords.txt"
+ {"i64.clz", TokenType::Unary, Opcode::I64Clz},
+#line 214 "src/lexer-keywords.txt"
+ {"i32.clz", TokenType::Unary, Opcode::I32Clz},
{""},
-#line 448 "src/lexer-keywords.txt"
- {"rethrow", TokenType::Rethrow, Opcode::Rethrow},
-#line 460 "src/lexer-keywords.txt"
- {"table.size", TokenType::TableSize, Opcode::TableSize},
+#line 454 "src/lexer-keywords.txt"
+ {"shared", TokenType::Shared},
{""},
-#line 329 "src/lexer-keywords.txt"
- {"i64.ctz", TokenType::Unary, Opcode::I64Ctz},
-#line 216 "src/lexer-keywords.txt"
- {"i32.ctz", TokenType::Unary, Opcode::I32Ctz},
#line 29 "src/lexer-keywords.txt"
{"block", TokenType::Block, Opcode::Block},
{""},
-#line 101 "src/lexer-keywords.txt"
- {"f64.const", TokenType::Const, Opcode::F64Const},
-#line 50 "src/lexer-keywords.txt"
- {"f32.const", TokenType::Const, Opcode::F32Const},
- {""},
-#line 328 "src/lexer-keywords.txt"
- {"i64.const", TokenType::Const, Opcode::I64Const},
-#line 215 "src/lexer-keywords.txt"
- {"i32.const", TokenType::Const, Opcode::I32Const},
- {""},
-#line 113 "src/lexer-keywords.txt"
- {"f64.load", TokenType::Load, Opcode::F64Load},
-#line 63 "src/lexer-keywords.txt"
- {"f32.load", TokenType::Load, Opcode::F32Load},
- {""},
-#line 351 "src/lexer-keywords.txt"
- {"i64.load", TokenType::Load, Opcode::I64Load},
-#line 233 "src/lexer-keywords.txt"
- {"i32.load", TokenType::Load, Opcode::I32Load},
- {""}, {""},
+#line 428 "src/lexer-keywords.txt"
+ {"local.tee", TokenType::LocalTee, Opcode::LocalTee},
+ {""}, {""}, {""},
+#line 126 "src/lexer-keywords.txt"
+ {"f64.trunc", TokenType::Unary, Opcode::F64Trunc},
+#line 75 "src/lexer-keywords.txt"
+ {"f32.trunc", TokenType::Unary, Opcode::F32Trunc},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 117 "src/lexer-keywords.txt"
{"f64.mul", TokenType::Binary, Opcode::F64Mul},
#line 67 "src/lexer-keywords.txt"
@@ -348,206 +340,171 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{"i64.mul", TokenType::Binary, Opcode::I64Mul},
#line 236 "src/lexer-keywords.txt"
{"i32.mul", TokenType::Binary, Opcode::I32Mul},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 100 "src/lexer-keywords.txt"
{"f64.ceil", TokenType::Unary, Opcode::F64Ceil},
#line 49 "src/lexer-keywords.txt"
{"f32.ceil", TokenType::Unary, Opcode::F32Ceil},
+#line 101 "src/lexer-keywords.txt"
+ {"f64.const", TokenType::Const, Opcode::F64Const},
+#line 50 "src/lexer-keywords.txt"
+ {"f32.const", TokenType::Const, Opcode::F32Const},
{""},
+#line 328 "src/lexer-keywords.txt"
+ {"i64.const", TokenType::Const, Opcode::I64Const},
+#line 215 "src/lexer-keywords.txt"
+ {"i32.const", TokenType::Const, Opcode::I32Const},
+#line 330 "src/lexer-keywords.txt"
+ {"i64.div_s", TokenType::Binary, Opcode::I64DivS},
+#line 217 "src/lexer-keywords.txt"
+ {"i32.div_s", TokenType::Binary, Opcode::I32DivS},
+ {""}, {""},
+#line 331 "src/lexer-keywords.txt"
+ {"i64.div_u", TokenType::Binary, Opcode::I64DivU},
+#line 218 "src/lexer-keywords.txt"
+ {"i32.div_u", TokenType::Binary, Opcode::I32DivU},
+#line 148 "src/lexer-keywords.txt"
+ {"f64x2", TokenType::F64X2},
+ {""},
+#line 425 "src/lexer-keywords.txt"
+ {"invoke", TokenType::Invoke},
+#line 391 "src/lexer-keywords.txt"
+ {"i64x2", TokenType::I64X2},
+ {""}, {""}, {""}, {""},
#line 124 "src/lexer-keywords.txt"
{"f64.store", TokenType::Store, Opcode::F64Store},
#line 73 "src/lexer-keywords.txt"
{"f32.store", TokenType::Store, Opcode::F32Store},
-#line 32 "src/lexer-keywords.txt"
- {"br_table", TokenType::BrTable, Opcode::BrTable},
+ {""},
#line 369 "src/lexer-keywords.txt"
{"i64.store", TokenType::Store, Opcode::I64Store},
#line 250 "src/lexer-keywords.txt"
{"i32.store", TokenType::Store, Opcode::I32Store},
- {""}, {""}, {""},
+#line 34 "src/lexer-keywords.txt"
+ {"call_indirect", TokenType::CallIndirect, Opcode::CallIndirect},
+ {""}, {""}, {""}, {""},
#line 367 "src/lexer-keywords.txt"
{"i64.store32", TokenType::Store, Opcode::I64Store32},
- {""}, {""}, {""}, {""}, {""},
-#line 35 "src/lexer-keywords.txt"
- {"call", TokenType::Call, Opcode::Call},
- {""},
-#line 327 "src/lexer-keywords.txt"
- {"i64.clz", TokenType::Unary, Opcode::I64Clz},
-#line 214 "src/lexer-keywords.txt"
- {"i32.clz", TokenType::Unary, Opcode::I32Clz},
+ {""}, {""}, {""},
+#line 361 "src/lexer-keywords.txt"
+ {"i64.rotl", TokenType::Binary, Opcode::I64Rotl},
+#line 243 "src/lexer-keywords.txt"
+ {"i32.rotl", TokenType::Binary, Opcode::I32Rotl},
{""}, {""},
#line 362 "src/lexer-keywords.txt"
{"i64.rotr", TokenType::Binary, Opcode::I64Rotr},
#line 244 "src/lexer-keywords.txt"
{"i32.rotr", TokenType::Binary, Opcode::I32Rotr},
+ {""}, {""},
+#line 113 "src/lexer-keywords.txt"
+ {"f64.load", TokenType::Load, Opcode::F64Load},
+#line 63 "src/lexer-keywords.txt"
+ {"f32.load", TokenType::Load, Opcode::F32Load},
{""},
-#line 429 "src/lexer-keywords.txt"
- {"local", TokenType::Local},
-#line 427 "src/lexer-keywords.txt"
- {"local.set", TokenType::LocalSet, Opcode::LocalSet},
-#line 143 "src/lexer-keywords.txt"
- {"f64x2.ne", TokenType::Compare, Opcode::F64X2Ne},
-#line 330 "src/lexer-keywords.txt"
- {"i64.div_s", TokenType::Binary, Opcode::I64DivS},
-#line 217 "src/lexer-keywords.txt"
- {"i32.div_s", TokenType::Binary, Opcode::I32DivS},
-#line 361 "src/lexer-keywords.txt"
- {"i64.rotl", TokenType::Binary, Opcode::I64Rotl},
-#line 243 "src/lexer-keywords.txt"
- {"i32.rotl", TokenType::Binary, Opcode::I32Rotl},
-#line 331 "src/lexer-keywords.txt"
- {"i64.div_u", TokenType::Binary, Opcode::I64DivU},
-#line 218 "src/lexer-keywords.txt"
- {"i32.div_u", TokenType::Binary, Opcode::I32DivU},
-#line 118 "src/lexer-keywords.txt"
- {"f64.nearest", TokenType::Unary, Opcode::F64Nearest},
-#line 68 "src/lexer-keywords.txt"
- {"f32.nearest", TokenType::Unary, Opcode::F32Nearest},
+#line 351 "src/lexer-keywords.txt"
+ {"i64.load", TokenType::Load, Opcode::I64Load},
+#line 233 "src/lexer-keywords.txt"
+ {"i32.load", TokenType::Load, Opcode::I32Load},
{""},
-#line 138 "src/lexer-keywords.txt"
- {"f64x2.lt", TokenType::Compare, Opcode::F64X2Lt},
-#line 428 "src/lexer-keywords.txt"
- {"local.tee", TokenType::LocalTee, Opcode::LocalTee},
+#line 449 "src/lexer-keywords.txt"
+ {"rethrow", TokenType::Rethrow, Opcode::Rethrow},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""},
#line 147 "src/lexer-keywords.txt"
{"f64x2.sub", TokenType::Binary, Opcode::F64X2Sub},
-#line 326 "src/lexer-keywords.txt"
- {"i64.atomic.wait", TokenType::AtomicWait, Opcode::I64AtomicWait},
-#line 213 "src/lexer-keywords.txt"
- {"i32.atomic.wait", TokenType::AtomicWait, Opcode::I32AtomicWait},
+#line 107 "src/lexer-keywords.txt"
+ {"f64.div", TokenType::Binary, Opcode::F64Div},
+#line 57 "src/lexer-keywords.txt"
+ {"f32.div", TokenType::Binary, Opcode::F32Div},
#line 390 "src/lexer-keywords.txt"
{"i64x2.sub", TokenType::Binary, Opcode::I64X2Sub},
-#line 128 "src/lexer-keywords.txt"
- {"f64x2.abs", TokenType::Unary, Opcode::F64X2Abs},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 143 "src/lexer-keywords.txt"
+ {"f64x2.ne", TokenType::Compare, Opcode::F64X2Ne},
{""},
-#line 140 "src/lexer-keywords.txt"
- {"f64x2.min", TokenType::Binary, Opcode::F64X2Min},
-#line 425 "src/lexer-keywords.txt"
- {"invoke", TokenType::Invoke},
+#line 445 "src/lexer-keywords.txt"
+ {"ref.is_null", TokenType::RefIsNull, Opcode::RefIsNull},
+#line 345 "src/lexer-keywords.txt"
+ {"i64.load16_s", TokenType::Load, Opcode::I64Load16S},
+#line 229 "src/lexer-keywords.txt"
+ {"i32.load16_s", TokenType::Load, Opcode::I32Load16S},
+ {""},
+#line 138 "src/lexer-keywords.txt"
+ {"f64x2.lt", TokenType::Compare, Opcode::F64X2Lt},
+#line 346 "src/lexer-keywords.txt"
+ {"i64.load16_u", TokenType::Load, Opcode::I64Load16U},
+#line 230 "src/lexer-keywords.txt"
+ {"i32.load16_u", TokenType::Load, Opcode::I32Load16U},
+ {""}, {""}, {""}, {""}, {""}, {""},
+#line 118 "src/lexer-keywords.txt"
+ {"f64.nearest", TokenType::Unary, Opcode::F64Nearest},
+#line 68 "src/lexer-keywords.txt"
+ {"f32.nearest", TokenType::Unary, Opcode::F32Nearest},
{""},
#line 137 "src/lexer-keywords.txt"
{"f64x2.le", TokenType::Compare, Opcode::F64X2Le},
- {""}, {""}, {""}, {""},
-#line 129 "src/lexer-keywords.txt"
- {"f64x2.add", TokenType::Binary, Opcode::F64X2Add},
+#line 140 "src/lexer-keywords.txt"
+ {"f64x2.min", TokenType::Binary, Opcode::F64X2Min},
+#line 472 "src/lexer-keywords.txt"
+ {"v128.not", TokenType::Unary, Opcode::V128Not},
+ {""}, {""}, {""}, {""}, {""},
+#line 516 "src/lexer-keywords.txt"
+ {"set_local", TokenType::LocalSet, Opcode::LocalSet},
{""}, {""},
-#line 380 "src/lexer-keywords.txt"
- {"i64x2.add", TokenType::Binary, Opcode::I64X2Add},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""},
-#line 20 "src/lexer-keywords.txt"
- {"assert_invalid", TokenType::AssertInvalid},
-#line 444 "src/lexer-keywords.txt"
- {"ref.is_null", TokenType::RefIsNull, Opcode::RefIsNull},
- {""}, {""}, {""},
-#line 24 "src/lexer-keywords.txt"
- {"assert_return", TokenType::AssertReturn},
- {""}, {""}, {""}, {""},
#line 325 "src/lexer-keywords.txt"
{"i64.atomic.store", TokenType::AtomicStore, Opcode::I64AtomicStore},
#line 212 "src/lexer-keywords.txt"
{"i32.atomic.store", TokenType::AtomicStore, Opcode::I32AtomicStore},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 141 "src/lexer-keywords.txt"
- {"f64x2.mul", TokenType::Binary, Opcode::F64X2Mul},
+#line 470 "src/lexer-keywords.txt"
+ {"v128.const", TokenType::Const, Opcode::V128Const},
+#line 517 "src/lexer-keywords.txt"
+ {"tee_local", TokenType::LocalTee, Opcode::LocalTee},
+ {""}, {""},
+#line 446 "src/lexer-keywords.txt"
+ {"ref.null", TokenType::RefNull, Opcode::RefNull},
+#line 451 "src/lexer-keywords.txt"
+ {"return_call", TokenType::ReturnCall, Opcode::ReturnCall},
+ {""},
+#line 128 "src/lexer-keywords.txt"
+ {"f64x2.abs", TokenType::Unary, Opcode::F64X2Abs},
+ {""},
+#line 326 "src/lexer-keywords.txt"
+ {"i64.atomic.wait", TokenType::AtomicWait, Opcode::I64AtomicWait},
+#line 213 "src/lexer-keywords.txt"
+ {"i32.atomic.wait", TokenType::AtomicWait, Opcode::I32AtomicWait},
{""}, {""}, {""},
#line 323 "src/lexer-keywords.txt"
{"i64.atomic.store32", TokenType::AtomicStore, Opcode::I64AtomicStore32},
-#line 26 "src/lexer-keywords.txt"
- {"assert_unlinkable", TokenType::AssertUnlinkable},
-#line 151 "src/lexer-keywords.txt"
- {"get", TokenType::Get},
- {""}, {""}, {""},
-#line 21 "src/lexer-keywords.txt"
- {"assert_malformed", TokenType::AssertMalformed},
-#line 347 "src/lexer-keywords.txt"
- {"i64.load32_s", TokenType::Load, Opcode::I64Load32S},
-#line 126 "src/lexer-keywords.txt"
- {"f64.trunc", TokenType::Unary, Opcode::F64Trunc},
-#line 75 "src/lexer-keywords.txt"
- {"f32.trunc", TokenType::Unary, Opcode::F32Trunc},
- {""},
-#line 348 "src/lexer-keywords.txt"
- {"i64.load32_u", TokenType::Load, Opcode::I64Load32U},
- {""},
-#line 467 "src/lexer-keywords.txt"
+#line 468 "src/lexer-keywords.txt"
{"v128.and", TokenType::Binary, Opcode::V128And},
-#line 445 "src/lexer-keywords.txt"
- {"ref.null", TokenType::RefNull, Opcode::RefNull},
- {""}, {""}, {""},
-#line 471 "src/lexer-keywords.txt"
- {"v128.not", TokenType::Unary, Opcode::V128Not},
+#line 469 "src/lexer-keywords.txt"
+ {"v128.bitselect", TokenType::Ternary, Opcode::V128BitSelect},
+#line 24 "src/lexer-keywords.txt"
+ {"assert_return", TokenType::AssertReturn},
+ {""}, {""}, {""}, {""}, {""},
+#line 141 "src/lexer-keywords.txt"
+ {"f64x2.mul", TokenType::Binary, Opcode::F64X2Mul},
+ {""}, {""},
+#line 474 "src/lexer-keywords.txt"
+ {"v128.store", TokenType::Store, Opcode::V128Store},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 473 "src/lexer-keywords.txt"
+ {"v128.or", TokenType::Binary, Opcode::V128Or},
+ {""}, {""},
#line 312 "src/lexer-keywords.txt"
{"i64.atomic.rmw8.sub_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw8SubU},
#line 200 "src/lexer-keywords.txt"
{"i32.atomic.rmw8.sub_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw8SubU},
{""}, {""},
-#line 107 "src/lexer-keywords.txt"
- {"f64.div", TokenType::Binary, Opcode::F64Div},
-#line 57 "src/lexer-keywords.txt"
- {"f32.div", TokenType::Binary, Opcode::F32Div},
- {""}, {""}, {""}, {""},
-#line 30 "src/lexer-keywords.txt"
- {"br_if", TokenType::BrIf, Opcode::BrIf},
- {""},
-#line 315 "src/lexer-keywords.txt"
- {"i64.atomic.rmw.add", TokenType::AtomicRmw, Opcode::I64AtomicRmwAdd},
-#line 203 "src/lexer-keywords.txt"
- {"i32.atomic.rmw.add", TokenType::AtomicRmw, Opcode::I32AtomicRmwAdd},
-#line 515 "src/lexer-keywords.txt"
- {"set_local", TokenType::LocalSet, Opcode::LocalSet},
- {""},
-#line 308 "src/lexer-keywords.txt"
- {"i64.atomic.rmw8.add_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw8AddU},
-#line 196 "src/lexer-keywords.txt"
- {"i32.atomic.rmw8.add_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw8AddU},
- {""},
-#line 305 "src/lexer-keywords.txt"
- {"i64.atomic.rmw32.sub_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32SubU},
-#line 516 "src/lexer-keywords.txt"
- {"tee_local", TokenType::LocalTee, Opcode::LocalTee},
- {""},
-#line 293 "src/lexer-keywords.txt"
- {"i64.atomic.load", TokenType::AtomicLoad, Opcode::I64AtomicLoad},
-#line 188 "src/lexer-keywords.txt"
- {"i32.atomic.load", TokenType::AtomicLoad, Opcode::I32AtomicLoad},
+#line 129 "src/lexer-keywords.txt"
+ {"f64x2.add", TokenType::Binary, Opcode::F64X2Add},
{""}, {""},
-#line 309 "src/lexer-keywords.txt"
- {"i64.atomic.rmw8.and_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw8AndU},
-#line 197 "src/lexer-keywords.txt"
- {"i32.atomic.rmw8.and_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw8AndU},
- {""}, {""}, {""}, {""},
-#line 473 "src/lexer-keywords.txt"
- {"v128.store", TokenType::Store, Opcode::V128Store},
-#line 450 "src/lexer-keywords.txt"
- {"return_call", TokenType::ReturnCall, Opcode::ReturnCall},
- {""}, {""}, {""}, {""},
-#line 345 "src/lexer-keywords.txt"
- {"i64.load16_s", TokenType::Load, Opcode::I64Load16S},
-#line 229 "src/lexer-keywords.txt"
- {"i32.load16_s", TokenType::Load, Opcode::I32Load16S},
-#line 318 "src/lexer-keywords.txt"
- {"i64.atomic.rmw.or", TokenType::AtomicRmw, Opcode::I64AtomicRmwOr},
-#line 206 "src/lexer-keywords.txt"
- {"i32.atomic.rmw.or", TokenType::AtomicRmw, Opcode::I32AtomicRmwOr},
-#line 346 "src/lexer-keywords.txt"
- {"i64.load16_u", TokenType::Load, Opcode::I64Load16U},
-#line 230 "src/lexer-keywords.txt"
- {"i32.load16_u", TokenType::Load, Opcode::I32Load16U},
- {""},
-#line 56 "src/lexer-keywords.txt"
- {"f32.demote_f64", TokenType::Convert, Opcode::F32DemoteF64},
-#line 472 "src/lexer-keywords.txt"
- {"v128.or", TokenType::Binary, Opcode::V128Or},
+#line 380 "src/lexer-keywords.txt"
+ {"i64x2.add", TokenType::Binary, Opcode::I64X2Add},
{""}, {""},
-#line 301 "src/lexer-keywords.txt"
- {"i64.atomic.rmw32.add_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32AddU},
- {""},
-#line 456 "src/lexer-keywords.txt"
- {"table.get", TokenType::TableGet, Opcode::TableGet},
-#line 316 "src/lexer-keywords.txt"
- {"i64.atomic.rmw.and", TokenType::AtomicRmw, Opcode::I64AtomicRmwAnd},
-#line 204 "src/lexer-keywords.txt"
- {"i32.atomic.rmw.and", TokenType::AtomicRmw, Opcode::I32AtomicRmwAnd},
+#line 20 "src/lexer-keywords.txt"
+ {"assert_invalid", TokenType::AssertInvalid},
+ {""}, {""}, {""}, {""},
#line 371 "src/lexer-keywords.txt"
{"i64.trunc_f32_s", TokenType::Convert, Opcode::I64TruncF32S},
#line 252 "src/lexer-keywords.txt"
@@ -556,56 +513,73 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{"i64.trunc_f32_u", TokenType::Convert, Opcode::I64TruncF32U},
#line 253 "src/lexer-keywords.txt"
{"i32.trunc_f32_u", TokenType::Convert, Opcode::I32TruncF32U},
- {""},
-#line 302 "src/lexer-keywords.txt"
- {"i64.atomic.rmw32.and_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32AndU},
- {""}, {""}, {""}, {""},
-#line 34 "src/lexer-keywords.txt"
- {"call_indirect", TokenType::CallIndirect, Opcode::CallIndirect},
{""}, {""}, {""}, {""}, {""},
-#line 470 "src/lexer-keywords.txt"
- {"v128.load", TokenType::Load, Opcode::V128Load},
- {""}, {""}, {""}, {""},
-#line 469 "src/lexer-keywords.txt"
- {"v128.const", TokenType::Const, Opcode::V128Const},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 483 "src/lexer-keywords.txt"
- {"f32.demote/f64", TokenType::Convert, Opcode::F32DemoteF64},
+#line 308 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw8.add_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw8AddU},
+#line 196 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw8.add_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw8AddU},
+ {""},
+#line 26 "src/lexer-keywords.txt"
+ {"assert_unlinkable", TokenType::AssertUnlinkable},
+#line 309 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw8.and_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw8AndU},
+#line 197 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw8.and_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw8AndU},
+ {""}, {""},
+#line 450 "src/lexer-keywords.txt"
+ {"return_call_indirect", TokenType::ReturnCallIndirect, Opcode::ReturnCallIndirect},
+#line 305 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw32.sub_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32SubU},
+#line 151 "src/lexer-keywords.txt"
+ {"get", TokenType::Get},
{""},
-#line 381 "src/lexer-keywords.txt"
- {"i64x2.all_true", TokenType::Unary, Opcode::I64X2AllTrue},
- {""}, {""}, {""}, {""},
#line 303 "src/lexer-keywords.txt"
{"i64.atomic.rmw32.cmpxchg_u", TokenType::AtomicRmwCmpxchg, Opcode::I64AtomicRmw32CmpxchgU},
- {""},
-#line 506 "src/lexer-keywords.txt"
- {"i64.trunc_s/f32", TokenType::Convert, Opcode::I64TruncF32S},
-#line 494 "src/lexer-keywords.txt"
- {"i32.trunc_s/f32", TokenType::Convert, Opcode::I32TruncF32S},
-#line 510 "src/lexer-keywords.txt"
- {"i64.trunc_u/f32", TokenType::Convert, Opcode::I64TruncF32U},
-#line 498 "src/lexer-keywords.txt"
- {"i32.trunc_u/f32", TokenType::Convert, Opcode::I32TruncF32U},
- {""}, {""}, {""}, {""},
-#line 304 "src/lexer-keywords.txt"
- {"i64.atomic.rmw32.or_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32OrU},
- {""},
+ {""}, {""},
+#line 293 "src/lexer-keywords.txt"
+ {"i64.atomic.load", TokenType::AtomicLoad, Opcode::I64AtomicLoad},
+#line 188 "src/lexer-keywords.txt"
+ {"i32.atomic.load", TokenType::AtomicLoad, Opcode::I32AtomicLoad},
#line 97 "src/lexer-keywords.txt"
{"f32x4", TokenType::F32X4},
{""}, {""},
#line 284 "src/lexer-keywords.txt"
{"i32x4", TokenType::I32X4},
+ {""}, {""}, {""},
+#line 30 "src/lexer-keywords.txt"
+ {"br_if", TokenType::BrIf, Opcode::BrIf},
+#line 507 "src/lexer-keywords.txt"
+ {"i64.trunc_s/f32", TokenType::Convert, Opcode::I64TruncF32S},
+#line 495 "src/lexer-keywords.txt"
+ {"i32.trunc_s/f32", TokenType::Convert, Opcode::I32TruncF32S},
+#line 511 "src/lexer-keywords.txt"
+ {"i64.trunc_u/f32", TokenType::Convert, Opcode::I64TruncF32U},
+#line 499 "src/lexer-keywords.txt"
+ {"i32.trunc_u/f32", TokenType::Convert, Opcode::I32TruncF32U},
+ {""}, {""}, {""},
+#line 21 "src/lexer-keywords.txt"
+ {"assert_malformed", TokenType::AssertMalformed},
+#line 347 "src/lexer-keywords.txt"
+ {"i64.load32_s", TokenType::Load, Opcode::I64Load32S},
+#line 471 "src/lexer-keywords.txt"
+ {"v128.load", TokenType::Load, Opcode::V128Load},
{""}, {""},
+#line 348 "src/lexer-keywords.txt"
+ {"i64.load32_u", TokenType::Load, Opcode::I64Load32U},
+#line 318 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw.or", TokenType::AtomicRmw, Opcode::I64AtomicRmwOr},
+#line 206 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw.or", TokenType::AtomicRmw, Opcode::I32AtomicRmwOr},
#line 319 "src/lexer-keywords.txt"
{"i64.atomic.rmw.sub", TokenType::AtomicRmw, Opcode::I64AtomicRmwSub},
#line 207 "src/lexer-keywords.txt"
{"i32.atomic.rmw.sub", TokenType::AtomicRmw, Opcode::I32AtomicRmwSub},
-#line 468 "src/lexer-keywords.txt"
- {"v128.bitselect", TokenType::Ternary, Opcode::V128BitSelect},
- {""}, {""}, {""},
-#line 136 "src/lexer-keywords.txt"
- {"f64x2.gt", TokenType::Compare, Opcode::F64X2Gt},
- {""}, {""},
+ {""},
+#line 315 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw.add", TokenType::AtomicRmw, Opcode::I64AtomicRmwAdd},
+#line 203 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw.add", TokenType::AtomicRmw, Opcode::I32AtomicRmwAdd},
+ {""}, {""}, {""}, {""},
#line 373 "src/lexer-keywords.txt"
{"i64.trunc_f64_s", TokenType::Convert, Opcode::I64TruncF64S},
#line 254 "src/lexer-keywords.txt"
@@ -614,244 +588,274 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{"i64.trunc_f64_u", TokenType::Convert, Opcode::I64TruncF64U},
#line 255 "src/lexer-keywords.txt"
{"i32.trunc_f64_u", TokenType::Convert, Opcode::I32TruncF64U},
+ {""},
+#line 475 "src/lexer-keywords.txt"
+ {"v128", Type::V128},
+#line 56 "src/lexer-keywords.txt"
+ {"f32.demote_f64", TokenType::Convert, Opcode::F32DemoteF64},
+ {""},
#line 132 "src/lexer-keywords.txt"
{"f64x2.div", TokenType::Binary, Opcode::F64X2Div},
- {""}, {""}, {""}, {""},
-#line 135 "src/lexer-keywords.txt"
- {"f64x2.ge", TokenType::Compare, Opcode::F64X2Ge},
- {""}, {""}, {""},
-#line 457 "src/lexer-keywords.txt"
- {"table.grow", TokenType::TableGrow, Opcode::TableGrow},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 96 "src/lexer-keywords.txt"
+ {"f32x4.sub", TokenType::Binary, Opcode::F32X4Sub},
+ {""}, {""},
+#line 283 "src/lexer-keywords.txt"
+ {"i32x4.sub", TokenType::Binary, Opcode::I32X4Sub},
{""},
-#line 102 "src/lexer-keywords.txt"
- {"f64.convert_i32_s", TokenType::Convert, Opcode::F64ConvertI32S},
-#line 51 "src/lexer-keywords.txt"
- {"f32.convert_i32_s", TokenType::Convert, Opcode::F32ConvertI32S},
-#line 446 "src/lexer-keywords.txt"
- {"register", TokenType::Register},
- {""}, {""}, {""}, {""}, {""},
-#line 153 "src/lexer-keywords.txt"
- {"global.set", TokenType::GlobalSet, Opcode::GlobalSet},
+#line 457 "src/lexer-keywords.txt"
+ {"table.get", TokenType::TableGet, Opcode::TableGet},
{""}, {""}, {""},
-#line 426 "src/lexer-keywords.txt"
- {"local.get", TokenType::LocalGet, Opcode::LocalGet},
+#line 301 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw32.add_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32AddU},
{""},
-#line 154 "src/lexer-keywords.txt"
- {"global", TokenType::Global},
- {""}, {""},
-#line 23 "src/lexer-keywords.txt"
- {"assert_return_canonical_nan", TokenType::AssertReturnCanonicalNan},
-#line 449 "src/lexer-keywords.txt"
- {"return_call_indirect", TokenType::ReturnCallIndirect, Opcode::ReturnCallIndirect},
- {""}, {""}, {""},
-#line 507 "src/lexer-keywords.txt"
- {"i64.trunc_s/f64", TokenType::Convert, Opcode::I64TruncF64S},
-#line 495 "src/lexer-keywords.txt"
- {"i32.trunc_s/f64", TokenType::Convert, Opcode::I32TruncF64S},
-#line 511 "src/lexer-keywords.txt"
- {"i64.trunc_u/f64", TokenType::Convert, Opcode::I64TruncF64U},
-#line 499 "src/lexer-keywords.txt"
- {"i32.trunc_u/f64", TokenType::Convert, Opcode::I32TruncF64U},
- {""}, {""}, {""},
#line 92 "src/lexer-keywords.txt"
{"f32x4.ne", TokenType::Compare, Opcode::F32X4Ne},
- {""}, {""},
+ {""},
+#line 302 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw32.and_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32AndU},
#line 277 "src/lexer-keywords.txt"
{"i32x4.ne", TokenType::Compare, Opcode::I32X4Ne},
- {""},
-#line 463 "src/lexer-keywords.txt"
- {"throw", TokenType::Throw, Opcode::Throw},
- {""}, {""}, {""}, {""},
+ {""}, {""},
#line 87 "src/lexer-keywords.txt"
{"f32x4.lt", TokenType::Compare, Opcode::F32X4Lt},
+#line 508 "src/lexer-keywords.txt"
+ {"i64.trunc_s/f64", TokenType::Convert, Opcode::I64TruncF64S},
+#line 496 "src/lexer-keywords.txt"
+ {"i32.trunc_s/f64", TokenType::Convert, Opcode::I32TruncF64S},
+#line 512 "src/lexer-keywords.txt"
+ {"i64.trunc_u/f64", TokenType::Convert, Opcode::I64TruncF64U},
+#line 500 "src/lexer-keywords.txt"
+ {"i32.trunc_u/f64", TokenType::Convert, Opcode::I32TruncF64U},
{""}, {""},
-#line 96 "src/lexer-keywords.txt"
- {"f32x4.sub", TokenType::Binary, Opcode::F32X4Sub},
-#line 298 "src/lexer-keywords.txt"
- {"i64.atomic.rmw16.sub_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16SubU},
-#line 193 "src/lexer-keywords.txt"
- {"i32.atomic.rmw16.sub_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16SubU},
-#line 283 "src/lexer-keywords.txt"
- {"i32x4.sub", TokenType::Binary, Opcode::I32X4Sub},
-#line 77 "src/lexer-keywords.txt"
- {"f32x4.abs", TokenType::Unary, Opcode::F32X4Abs},
+#line 484 "src/lexer-keywords.txt"
+ {"f32.demote/f64", TokenType::Convert, Opcode::F32DemoteF64},
+ {""},
+#line 316 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw.and", TokenType::AtomicRmw, Opcode::I64AtomicRmwAnd},
+#line 204 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw.and", TokenType::AtomicRmw, Opcode::I32AtomicRmwAnd},
{""},
-#line 89 "src/lexer-keywords.txt"
- {"f32x4.min", TokenType::Binary, Opcode::F32X4Min},
- {""}, {""},
#line 86 "src/lexer-keywords.txt"
{"f32x4.le", TokenType::Compare, Opcode::F32X4Le},
+#line 89 "src/lexer-keywords.txt"
+ {"f32x4.min", TokenType::Binary, Opcode::F32X4Min},
#line 273 "src/lexer-keywords.txt"
{"i32x4.lt_s", TokenType::Compare, Opcode::I32X4LtS},
- {""},
+#line 304 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw32.or_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32OrU},
#line 274 "src/lexer-keywords.txt"
{"i32x4.lt_u", TokenType::Compare, Opcode::I32X4LtU},
- {""},
-#line 78 "src/lexer-keywords.txt"
- {"f32x4.add", TokenType::Binary, Opcode::F32X4Add},
- {""},
+ {""}, {""}, {""},
#line 271 "src/lexer-keywords.txt"
{"i32x4.le_s", TokenType::Compare, Opcode::I32X4LeS},
-#line 262 "src/lexer-keywords.txt"
- {"i32x4.add", TokenType::Binary, Opcode::I32X4Add},
+#line 426 "src/lexer-keywords.txt"
+ {"local.get", TokenType::LocalGet, Opcode::LocalGet},
#line 272 "src/lexer-keywords.txt"
{"i32x4.le_u", TokenType::Compare, Opcode::I32X4LeU},
- {""}, {""},
-#line 104 "src/lexer-keywords.txt"
- {"f64.convert_i64_s", TokenType::Convert, Opcode::F64ConvertI64S},
-#line 53 "src/lexer-keywords.txt"
- {"f32.convert_i64_s", TokenType::Convert, Opcode::F32ConvertI64S},
+ {""},
+#line 381 "src/lexer-keywords.txt"
+ {"i64x2.all_true", TokenType::Unary, Opcode::I64X2AllTrue},
+#line 444 "src/lexer-keywords.txt"
+ {"ref.func", TokenType::RefFunc, Opcode::RefFunc},
{""}, {""}, {""}, {""}, {""}, {""},
-#line 375 "src/lexer-keywords.txt"
- {"i64.trunc_sat_f32_s", TokenType::Convert, Opcode::I64TruncSatF32S},
-#line 256 "src/lexer-keywords.txt"
- {"i32.trunc_sat_f32_s", TokenType::Convert, Opcode::I32TruncSatF32S},
-#line 294 "src/lexer-keywords.txt"
- {"i64.atomic.rmw16.add_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16AddU},
-#line 189 "src/lexer-keywords.txt"
- {"i32.atomic.rmw16.add_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16AddU},
-#line 376 "src/lexer-keywords.txt"
- {"i64.trunc_sat_f32_u", TokenType::Convert, Opcode::I64TruncSatF32U},
-#line 257 "src/lexer-keywords.txt"
- {"i32.trunc_sat_f32_u", TokenType::Convert, Opcode::I32TruncSatF32U},
-#line 366 "src/lexer-keywords.txt"
- {"i64.store16", TokenType::Store, Opcode::I64Store16},
-#line 248 "src/lexer-keywords.txt"
- {"i32.store16", TokenType::Store, Opcode::I32Store16},
+#line 77 "src/lexer-keywords.txt"
+ {"f32x4.abs", TokenType::Unary, Opcode::F32X4Abs},
{""}, {""}, {""}, {""},
-#line 295 "src/lexer-keywords.txt"
- {"i64.atomic.rmw16.and_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16AndU},
-#line 190 "src/lexer-keywords.txt"
- {"i32.atomic.rmw16.and_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16AndU},
- {""}, {""}, {""}, {""}, {""},
-#line 465 "src/lexer-keywords.txt"
+#line 102 "src/lexer-keywords.txt"
+ {"f64.convert_i32_s", TokenType::Convert, Opcode::F64ConvertI32S},
+#line 51 "src/lexer-keywords.txt"
+ {"f32.convert_i32_s", TokenType::Convert, Opcode::F32ConvertI32S},
+ {""}, {""},
+#line 466 "src/lexer-keywords.txt"
{"type", TokenType::Type},
+ {""}, {""}, {""},
+#line 368 "src/lexer-keywords.txt"
+ {"i64.store8", TokenType::Store, Opcode::I64Store8},
+#line 249 "src/lexer-keywords.txt"
+ {"i32.store8", TokenType::Store, Opcode::I32Store8},
+ {""},
#line 90 "src/lexer-keywords.txt"
{"f32x4.mul", TokenType::Binary, Opcode::F32X4Mul},
{""}, {""},
#line 275 "src/lexer-keywords.txt"
{"i32x4.mul", TokenType::Binary, Opcode::I32X4Mul},
-#line 474 "src/lexer-keywords.txt"
- {"v128", Type::V128},
- {""}, {""}, {""}, {""},
-#line 109 "src/lexer-keywords.txt"
- {"f64.floor", TokenType::Unary, Opcode::F64Floor},
-#line 59 "src/lexer-keywords.txt"
- {"f32.floor", TokenType::Unary, Opcode::F32Floor},
- {""},
+ {""}, {""}, {""}, {""}, {""}, {""},
#line 424 "src/lexer-keywords.txt"
{"import", TokenType::Import},
- {""},
-#line 291 "src/lexer-keywords.txt"
- {"i64.atomic.load32_u", TokenType::AtomicLoad, Opcode::I64AtomicLoad32U},
+ {""}, {""},
#line 46 "src/lexer-keywords.txt"
{"export", TokenType::Export},
- {""}, {""}, {""},
-#line 103 "src/lexer-keywords.txt"
- {"f64.convert_i32_u", TokenType::Convert, Opcode::F64ConvertI32U},
-#line 52 "src/lexer-keywords.txt"
- {"f32.convert_i32_u", TokenType::Convert, Opcode::F32ConvertI32U},
-#line 492 "src/lexer-keywords.txt"
- {"get_local", TokenType::LocalGet, Opcode::LocalGet},
-#line 296 "src/lexer-keywords.txt"
- {"i64.atomic.rmw16.cmpxchg_u", TokenType::AtomicRmwCmpxchg, Opcode::I64AtomicRmw16CmpxchgU},
-#line 191 "src/lexer-keywords.txt"
- {"i32.atomic.rmw16.cmpxchg_u", TokenType::AtomicRmwCmpxchg, Opcode::I32AtomicRmw16CmpxchgU},
-#line 18 "src/lexer-keywords.txt"
- {"anyref", Type::Anyref},
+ {""}, {""}, {""}, {""}, {""}, {""},
+#line 78 "src/lexer-keywords.txt"
+ {"f32x4.add", TokenType::Binary, Opcode::F32X4Add},
+ {""}, {""},
+#line 262 "src/lexer-keywords.txt"
+ {"i32x4.add", TokenType::Binary, Opcode::I32X4Add},
+ {""}, {""}, {""}, {""},
+#line 154 "src/lexer-keywords.txt"
+ {"global", TokenType::Global},
+ {""},
+#line 153 "src/lexer-keywords.txt"
+ {"global.set", TokenType::GlobalSet, Opcode::GlobalSet},
{""},
#line 349 "src/lexer-keywords.txt"
{"i64.load8_s", TokenType::Load, Opcode::I64Load8S},
#line 231 "src/lexer-keywords.txt"
{"i32.load8_s", TokenType::Load, Opcode::I32Load8S},
-#line 368 "src/lexer-keywords.txt"
- {"i64.store8", TokenType::Store, Opcode::I64Store8},
-#line 249 "src/lexer-keywords.txt"
- {"i32.store8", TokenType::Store, Opcode::I32Store8},
+ {""}, {""},
#line 350 "src/lexer-keywords.txt"
{"i64.load8_u", TokenType::Load, Opcode::I64Load8U},
#line 232 "src/lexer-keywords.txt"
{"i32.load8_u", TokenType::Load, Opcode::I32Load8U},
-#line 297 "src/lexer-keywords.txt"
- {"i64.atomic.rmw16.or_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16OrU},
-#line 192 "src/lexer-keywords.txt"
- {"i32.atomic.rmw16.or_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16OrU},
- {""}, {""}, {""},
-#line 485 "src/lexer-keywords.txt"
- {"f64.convert_s/i32", TokenType::Convert, Opcode::F64ConvertI32S},
-#line 479 "src/lexer-keywords.txt"
- {"f32.convert_s/i32", TokenType::Convert, Opcode::F32ConvertI32S},
-#line 487 "src/lexer-keywords.txt"
- {"f64.convert_u/i32", TokenType::Convert, Opcode::F64ConvertI32U},
-#line 481 "src/lexer-keywords.txt"
- {"f32.convert_u/i32", TokenType::Convert, Opcode::F32ConvertI32U},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 31 "src/lexer-keywords.txt"
- {"br_on_exn", TokenType::BrOnExn, Opcode::BrOnExn},
-#line 40 "src/lexer-keywords.txt"
- {"drop", TokenType::Drop, Opcode::Drop},
- {""}, {""}, {""},
-#line 503 "src/lexer-keywords.txt"
- {"i64.extend_s/i32", TokenType::Convert, Opcode::I64ExtendI32S},
- {""},
-#line 504 "src/lexer-keywords.txt"
- {"i64.extend_u/i32", TokenType::Convert, Opcode::I64ExtendI32U},
-#line 435 "src/lexer-keywords.txt"
- {"memory.size", TokenType::MemorySize, Opcode::MemorySize},
+#line 447 "src/lexer-keywords.txt"
+ {"register", TokenType::Register},
+ {""}, {""}, {""}, {""},
+#line 464 "src/lexer-keywords.txt"
+ {"throw", TokenType::Throw, Opcode::Throw},
+ {""}, {""}, {""}, {""},
+#line 104 "src/lexer-keywords.txt"
+ {"f64.convert_i64_s", TokenType::Convert, Opcode::F64ConvertI64S},
+#line 53 "src/lexer-keywords.txt"
+ {"f32.convert_i64_s", TokenType::Convert, Opcode::F32ConvertI64S},
{""}, {""},
#line 441 "src/lexer-keywords.txt"
{"param", TokenType::Param},
- {""}, {""}, {""},
-#line 434 "src/lexer-keywords.txt"
- {"memory.init", TokenType::MemoryInit, Opcode::MemoryInit},
- {""}, {""}, {""}, {""},
-#line 119 "src/lexer-keywords.txt"
- {"f64.neg", TokenType::Unary, Opcode::F64Neg},
-#line 69 "src/lexer-keywords.txt"
- {"f32.neg", TokenType::Unary, Opcode::F32Neg},
{""},
-#line 322 "src/lexer-keywords.txt"
- {"i64.atomic.store16", TokenType::AtomicStore, Opcode::I64AtomicStore16},
-#line 210 "src/lexer-keywords.txt"
- {"i32.atomic.store16", TokenType::AtomicStore, Opcode::I32AtomicStore16},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 40 "src/lexer-keywords.txt"
+ {"drop", TokenType::Drop, Opcode::Drop},
+#line 136 "src/lexer-keywords.txt"
+ {"f64x2.gt", TokenType::Compare, Opcode::F64X2Gt},
+#line 458 "src/lexer-keywords.txt"
+ {"table.grow", TokenType::TableGrow, Opcode::TableGrow},
+ {""}, {""}, {""}, {""}, {""},
+#line 23 "src/lexer-keywords.txt"
+ {"assert_return_canonical_nan", TokenType::AssertReturnCanonicalNan},
+#line 290 "src/lexer-keywords.txt"
+ {"i64.atomic.load16_u", TokenType::AtomicLoad, Opcode::I64AtomicLoad16U},
+#line 186 "src/lexer-keywords.txt"
+ {"i32.atomic.load16_u", TokenType::AtomicLoad, Opcode::I32AtomicLoad16U},
+ {""}, {""},
+#line 135 "src/lexer-keywords.txt"
+ {"f64x2.ge", TokenType::Compare, Opcode::F64X2Ge},
+#line 103 "src/lexer-keywords.txt"
+ {"f64.convert_i32_u", TokenType::Convert, Opcode::F64ConvertI32U},
+#line 52 "src/lexer-keywords.txt"
+ {"f32.convert_i32_u", TokenType::Convert, Opcode::F32ConvertI32U},
+ {""},
+#line 298 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw16.sub_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16SubU},
+#line 193 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw16.sub_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16SubU},
+ {""},
+#line 296 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw16.cmpxchg_u", TokenType::AtomicRmwCmpxchg, Opcode::I64AtomicRmw16CmpxchgU},
+#line 191 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw16.cmpxchg_u", TokenType::AtomicRmwCmpxchg, Opcode::I32AtomicRmw16CmpxchgU},
#line 430 "src/lexer-keywords.txt"
{"loop", TokenType::Loop, Opcode::Loop},
- {""},
-#line 105 "src/lexer-keywords.txt"
- {"f64.convert_i64_u", TokenType::Convert, Opcode::F64ConvertI64U},
-#line 54 "src/lexer-keywords.txt"
- {"f32.convert_i64_u", TokenType::Convert, Opcode::F32ConvertI64U},
+ {""}, {""}, {""},
+#line 333 "src/lexer-keywords.txt"
+ {"i64.eqz", TokenType::Convert, Opcode::I64Eqz},
+#line 220 "src/lexer-keywords.txt"
+ {"i32.eqz", TokenType::Convert, Opcode::I32Eqz},
{""}, {""},
#line 356 "src/lexer-keywords.txt"
{"i64.or", TokenType::Binary, Opcode::I64Or},
#line 238 "src/lexer-keywords.txt"
{"i32.or", TokenType::Binary, Opcode::I32Or},
+ {""}, {""},
+#line 375 "src/lexer-keywords.txt"
+ {"i64.trunc_sat_f32_s", TokenType::Convert, Opcode::I64TruncSatF32S},
+#line 256 "src/lexer-keywords.txt"
+ {"i32.trunc_sat_f32_s", TokenType::Convert, Opcode::I32TruncSatF32S},
+ {""}, {""},
+#line 376 "src/lexer-keywords.txt"
+ {"i64.trunc_sat_f32_u", TokenType::Convert, Opcode::I64TruncSatF32U},
+#line 257 "src/lexer-keywords.txt"
+ {"i32.trunc_sat_f32_u", TokenType::Convert, Opcode::I32TruncSatF32U},
+ {""}, {""}, {""},
+#line 81 "src/lexer-keywords.txt"
+ {"f32x4.div", TokenType::Binary, Opcode::F32X4Div},
+ {""}, {""}, {""},
+#line 443 "src/lexer-keywords.txt"
+ {"quote", TokenType::Quote},
{""}, {""}, {""}, {""}, {""}, {""},
-#line 335 "src/lexer-keywords.txt"
- {"i64.extend32_s", TokenType::Unary, Opcode::I64Extend32S},
+#line 123 "src/lexer-keywords.txt"
+ {"f64.sqrt", TokenType::Unary, Opcode::F64Sqrt},
+#line 72 "src/lexer-keywords.txt"
+ {"f32.sqrt", TokenType::Unary, Opcode::F32Sqrt},
+#line 493 "src/lexer-keywords.txt"
+ {"get_local", TokenType::LocalGet, Opcode::LocalGet},
+ {""}, {""},
+#line 31 "src/lexer-keywords.txt"
+ {"br_on_exn", TokenType::BrOnExn, Opcode::BrOnExn},
+ {""}, {""}, {""}, {""}, {""}, {""},
+#line 366 "src/lexer-keywords.txt"
+ {"i64.store16", TokenType::Store, Opcode::I64Store16},
+#line 248 "src/lexer-keywords.txt"
+ {"i32.store16", TokenType::Store, Opcode::I32Store16},
+ {""}, {""},
+#line 442 "src/lexer-keywords.txt"
+ {"passive", TokenType::Passive},
+ {""}, {""},
+#line 105 "src/lexer-keywords.txt"
+ {"f64.convert_i64_u", TokenType::Convert, Opcode::F64ConvertI64U},
+#line 54 "src/lexer-keywords.txt"
+ {"f32.convert_i64_u", TokenType::Convert, Opcode::F32ConvertI64U},
+ {""}, {""},
+#line 36 "src/lexer-keywords.txt"
+ {"catch", TokenType::Catch, Opcode::Catch},
{""},
+#line 504 "src/lexer-keywords.txt"
+ {"i64.extend_s/i32", TokenType::Convert, Opcode::I64ExtendI32S},
+ {""},
+#line 505 "src/lexer-keywords.txt"
+ {"i64.extend_u/i32", TokenType::Convert, Opcode::I64ExtendI32U},
+#line 294 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw16.add_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16AddU},
+#line 189 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw16.add_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16AddU},
#line 111 "src/lexer-keywords.txt"
{"f64.gt", TokenType::Compare, Opcode::F64Gt},
#line 61 "src/lexer-keywords.txt"
{"f32.gt", TokenType::Compare, Opcode::F32Gt},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 337 "src/lexer-keywords.txt"
- {"i64.extend_i32_s", TokenType::Convert, Opcode::I64ExtendI32S},
+#line 295 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw16.and_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16AndU},
+#line 190 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw16.and_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16AndU},
+ {""}, {""}, {""}, {""},
#line 263 "src/lexer-keywords.txt"
{"i32x4.all_true", TokenType::Unary, Opcode::I32X4AllTrue},
+ {""},
+#line 109 "src/lexer-keywords.txt"
+ {"f64.floor", TokenType::Unary, Opcode::F64Floor},
+#line 59 "src/lexer-keywords.txt"
+ {"f32.floor", TokenType::Unary, Opcode::F32Floor},
#line 110 "src/lexer-keywords.txt"
{"f64.ge", TokenType::Compare, Opcode::F64Ge},
#line 60 "src/lexer-keywords.txt"
{"f32.ge", TokenType::Compare, Opcode::F32Ge},
-#line 338 "src/lexer-keywords.txt"
- {"i64.extend_i32_u", TokenType::Convert, Opcode::I64ExtendI32U},
- {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""},
+#line 486 "src/lexer-keywords.txt"
+ {"f64.convert_s/i32", TokenType::Convert, Opcode::F64ConvertI32S},
+#line 480 "src/lexer-keywords.txt"
+ {"f32.convert_s/i32", TokenType::Convert, Opcode::F32ConvertI32S},
+#line 488 "src/lexer-keywords.txt"
+ {"f64.convert_u/i32", TokenType::Convert, Opcode::F64ConvertI32U},
+#line 482 "src/lexer-keywords.txt"
+ {"f32.convert_u/i32", TokenType::Convert, Opcode::F32ConvertI32U},
+#line 297 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw16.or_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16OrU},
+#line 192 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw16.or_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16OrU},
#line 341 "src/lexer-keywords.txt"
{"i64.gt_s", TokenType::Compare, Opcode::I64GtS},
#line 225 "src/lexer-keywords.txt"
{"i32.gt_s", TokenType::Compare, Opcode::I32GtS},
- {""}, {""},
+ {""},
+#line 421 "src/lexer-keywords.txt"
+ {"i8x16.sub", TokenType::Binary, Opcode::I8X16Sub},
#line 342 "src/lexer-keywords.txt"
{"i64.gt_u", TokenType::Compare, Opcode::I64GtU},
#line 226 "src/lexer-keywords.txt"
@@ -860,309 +864,398 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{"i64.ge_s", TokenType::Compare, Opcode::I64GeS},
#line 223 "src/lexer-keywords.txt"
{"i32.ge_s", TokenType::Compare, Opcode::I32GeS},
- {""},
-#line 432 "src/lexer-keywords.txt"
- {"memory.fill", TokenType::MemoryFill, Opcode::MemoryFill},
+ {""}, {""},
#line 340 "src/lexer-keywords.txt"
{"i64.ge_u", TokenType::Compare, Opcode::I64GeU},
#line 224 "src/lexer-keywords.txt"
{"i32.ge_u", TokenType::Compare, Opcode::I32GeU},
- {""}, {""}, {""},
-#line 443 "src/lexer-keywords.txt"
- {"quote", TokenType::Quote},
-#line 394 "src/lexer-keywords.txt"
- {"i64.xor", TokenType::Binary, Opcode::I64Xor},
-#line 287 "src/lexer-keywords.txt"
- {"i32.xor", TokenType::Binary, Opcode::I32Xor},
{""}, {""},
-#line 85 "src/lexer-keywords.txt"
- {"f32x4.gt", TokenType::Compare, Opcode::F32X4Gt},
+#line 413 "src/lexer-keywords.txt"
+ {"i8x16.ne", TokenType::Compare, Opcode::I8X16Ne},
{""}, {""}, {""},
-#line 123 "src/lexer-keywords.txt"
- {"f64.sqrt", TokenType::Unary, Opcode::F64Sqrt},
-#line 72 "src/lexer-keywords.txt"
- {"f32.sqrt", TokenType::Unary, Opcode::F32Sqrt},
- {""},
-#line 81 "src/lexer-keywords.txt"
- {"f32x4.div", TokenType::Binary, Opcode::F32X4Div},
- {""}, {""},
-#line 152 "src/lexer-keywords.txt"
- {"global.get", TokenType::GlobalGet, Opcode::GlobalGet},
+#line 292 "src/lexer-keywords.txt"
+ {"i64.atomic.load8_u", TokenType::AtomicLoad, Opcode::I64AtomicLoad8U},
+#line 187 "src/lexer-keywords.txt"
+ {"i32.atomic.load8_u", TokenType::AtomicLoad, Opcode::I32AtomicLoad8U},
+ {""}, {""}, {""},
+#line 291 "src/lexer-keywords.txt"
+ {"i64.atomic.load32_u", TokenType::AtomicLoad, Opcode::I64AtomicLoad32U},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 409 "src/lexer-keywords.txt"
+ {"i8x16.lt_s", TokenType::Compare, Opcode::I8X16LtS},
{""},
-#line 84 "src/lexer-keywords.txt"
- {"f32x4.ge", TokenType::Compare, Opcode::F32X4Ge},
-#line 269 "src/lexer-keywords.txt"
- {"i32x4.gt_s", TokenType::Compare, Opcode::I32X4GtS},
+#line 410 "src/lexer-keywords.txt"
+ {"i8x16.lt_u", TokenType::Compare, Opcode::I8X16LtU},
+ {""}, {""}, {""},
+#line 407 "src/lexer-keywords.txt"
+ {"i8x16.le_s", TokenType::Compare, Opcode::I8X16LeS},
{""},
-#line 270 "src/lexer-keywords.txt"
- {"i32x4.gt_u", TokenType::Compare, Opcode::I32X4GtU},
-#line 442 "src/lexer-keywords.txt"
- {"passive", TokenType::Passive},
-#line 142 "src/lexer-keywords.txt"
- {"f64x2.neg", TokenType::Unary, Opcode::F64X2Neg},
-#line 19 "src/lexer-keywords.txt"
- {"assert_exhaustion", TokenType::AssertExhaustion},
-#line 267 "src/lexer-keywords.txt"
- {"i32x4.ge_s", TokenType::Compare, Opcode::I32X4GeS},
-#line 384 "src/lexer-keywords.txt"
- {"i64x2.neg", TokenType::Unary, Opcode::I64X2Neg},
-#line 268 "src/lexer-keywords.txt"
- {"i32x4.ge_u", TokenType::Compare, Opcode::I32X4GeU},
-#line 36 "src/lexer-keywords.txt"
- {"catch", TokenType::Catch, Opcode::Catch},
- {""}, {""},
+#line 408 "src/lexer-keywords.txt"
+ {"i8x16.le_u", TokenType::Compare, Opcode::I8X16LeU},
+#line 18 "src/lexer-keywords.txt"
+ {"anyref", Type::Anyref},
+ {""}, {""}, {""},
+#line 435 "src/lexer-keywords.txt"
+ {"memory.size", TokenType::MemorySize, Opcode::MemorySize},
+#line 322 "src/lexer-keywords.txt"
+ {"i64.atomic.store16", TokenType::AtomicStore, Opcode::I64AtomicStore16},
+#line 210 "src/lexer-keywords.txt"
+ {"i32.atomic.store16", TokenType::AtomicStore, Opcode::I32AtomicStore16},
#line 364 "src/lexer-keywords.txt"
{"i64.shr_s", TokenType::Binary, Opcode::I64ShrS},
#line 246 "src/lexer-keywords.txt"
{"i32.shr_s", TokenType::Binary, Opcode::I32ShrS},
- {""}, {""},
+#line 434 "src/lexer-keywords.txt"
+ {"memory.init", TokenType::MemoryInit, Opcode::MemoryInit},
+ {""},
#line 365 "src/lexer-keywords.txt"
{"i64.shr_u", TokenType::Binary, Opcode::I64ShrU},
#line 247 "src/lexer-keywords.txt"
{"i32.shr_u", TokenType::Binary, Opcode::I32ShrU},
- {""},
-#line 508 "src/lexer-keywords.txt"
- {"i64.trunc_s:sat/f32", TokenType::Convert, Opcode::I64TruncSatF32S},
-#line 496 "src/lexer-keywords.txt"
- {"i32.trunc_s:sat/f32", TokenType::Convert, Opcode::I32TruncSatF32S},
-#line 512 "src/lexer-keywords.txt"
- {"i64.trunc_u:sat/f32", TokenType::Convert, Opcode::I64TruncSatF32U},
-#line 500 "src/lexer-keywords.txt"
- {"i32.trunc_u:sat/f32", TokenType::Convert, Opcode::I32TruncSatF32U},
-#line 333 "src/lexer-keywords.txt"
- {"i64.eqz", TokenType::Convert, Opcode::I64Eqz},
-#line 220 "src/lexer-keywords.txt"
- {"i32.eqz", TokenType::Convert, Opcode::I32Eqz},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""},
#line 145 "src/lexer-keywords.txt"
{"f64x2.splat", TokenType::Unary, Opcode::F64X2Splat},
-#line 413 "src/lexer-keywords.txt"
- {"i8x16.ne", TokenType::Compare, Opcode::I8X16Ne},
+#line 335 "src/lexer-keywords.txt"
+ {"i64.extend32_s", TokenType::Unary, Opcode::I64Extend32S},
{""},
#line 389 "src/lexer-keywords.txt"
{"i64x2.splat", TokenType::Unary, Opcode::I64X2Splat},
-#line 290 "src/lexer-keywords.txt"
- {"i64.atomic.load16_u", TokenType::AtomicLoad, Opcode::I64AtomicLoad16U},
-#line 186 "src/lexer-keywords.txt"
- {"i32.atomic.load16_u", TokenType::AtomicLoad, Opcode::I32AtomicLoad16U},
- {""}, {""}, {""},
#line 363 "src/lexer-keywords.txt"
{"i64.shl", TokenType::Binary, Opcode::I64Shl},
#line 245 "src/lexer-keywords.txt"
{"i32.shl", TokenType::Binary, Opcode::I32Shl},
- {""},
-#line 174 "src/lexer-keywords.txt"
- {"i16x8.ne", TokenType::Compare, Opcode::I16X8Ne},
- {""},
-#line 421 "src/lexer-keywords.txt"
- {"i8x16.sub", TokenType::Binary, Opcode::I8X16Sub},
{""}, {""},
-#line 475 "src/lexer-keywords.txt"
- {"v128.xor", TokenType::Binary, Opcode::V128Xor},
+#line 85 "src/lexer-keywords.txt"
+ {"f32x4.gt", TokenType::Compare, Opcode::F32X4Gt},
{""}, {""}, {""},
-#line 409 "src/lexer-keywords.txt"
- {"i8x16.lt_s", TokenType::Compare, Opcode::I8X16LtS},
+#line 411 "src/lexer-keywords.txt"
+ {"i8x16.mul", TokenType::Binary, Opcode::I8X16Mul},
+ {""}, {""},
+#line 337 "src/lexer-keywords.txt"
+ {"i64.extend_i32_s", TokenType::Convert, Opcode::I64ExtendI32S},
+ {""}, {""}, {""},
+#line 338 "src/lexer-keywords.txt"
+ {"i64.extend_i32_u", TokenType::Convert, Opcode::I64ExtendI32U},
+#line 84 "src/lexer-keywords.txt"
+ {"f32x4.ge", TokenType::Compare, Opcode::F32X4Ge},
{""},
-#line 410 "src/lexer-keywords.txt"
- {"i8x16.lt_u", TokenType::Compare, Opcode::I8X16LtU},
+#line 269 "src/lexer-keywords.txt"
+ {"i32x4.gt_s", TokenType::Compare, Opcode::I32X4GtS},
+ {""},
+#line 270 "src/lexer-keywords.txt"
+ {"i32x4.gt_u", TokenType::Compare, Opcode::I32X4GtU},
+ {""}, {""}, {""},
+#line 267 "src/lexer-keywords.txt"
+ {"i32x4.ge_s", TokenType::Compare, Opcode::I32X4GeS},
+#line 476 "src/lexer-keywords.txt"
+ {"v128.xor", TokenType::Binary, Opcode::V128Xor},
+#line 268 "src/lexer-keywords.txt"
+ {"i32x4.ge_u", TokenType::Compare, Opcode::I32X4GeU},
{""},
-#line 182 "src/lexer-keywords.txt"
- {"i16x8.sub", TokenType::Binary, Opcode::I16X8Sub},
-#line 307 "src/lexer-keywords.txt"
- {"i64.atomic.rmw32.xor_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32XorU},
-#line 407 "src/lexer-keywords.txt"
- {"i8x16.le_s", TokenType::Compare, Opcode::I8X16LeS},
#line 397 "src/lexer-keywords.txt"
{"i8x16.add", TokenType::Binary, Opcode::I8X16Add},
-#line 408 "src/lexer-keywords.txt"
- {"i8x16.le_u", TokenType::Compare, Opcode::I8X16LeU},
-#line 292 "src/lexer-keywords.txt"
- {"i64.atomic.load8_u", TokenType::AtomicLoad, Opcode::I64AtomicLoad8U},
-#line 187 "src/lexer-keywords.txt"
- {"i32.atomic.load8_u", TokenType::AtomicLoad, Opcode::I32AtomicLoad8U},
-#line 170 "src/lexer-keywords.txt"
- {"i16x8.lt_s", TokenType::Compare, Opcode::I16X8LtS},
- {""},
-#line 171 "src/lexer-keywords.txt"
- {"i16x8.lt_u", TokenType::Compare, Opcode::I16X8LtU},
{""}, {""}, {""},
-#line 168 "src/lexer-keywords.txt"
- {"i16x8.le_s", TokenType::Compare, Opcode::I16X8LeS},
-#line 158 "src/lexer-keywords.txt"
- {"i16x8.add", TokenType::Binary, Opcode::I16X8Add},
-#line 169 "src/lexer-keywords.txt"
- {"i16x8.le_u", TokenType::Compare, Opcode::I16X8LeU},
+#line 146 "src/lexer-keywords.txt"
+ {"f64x2.sqrt", TokenType::Unary, Opcode::F64X2Sqrt},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 432 "src/lexer-keywords.txt"
+ {"memory.fill", TokenType::MemoryFill, Opcode::MemoryFill},
{""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 306 "src/lexer-keywords.txt"
{"i64.atomic.rmw32.xchg_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32XchgU},
-#line 509 "src/lexer-keywords.txt"
- {"i64.trunc_s:sat/f64", TokenType::Convert, Opcode::I64TruncSatF64S},
-#line 497 "src/lexer-keywords.txt"
- {"i32.trunc_s:sat/f64", TokenType::Convert, Opcode::I32TruncSatF64S},
-#line 513 "src/lexer-keywords.txt"
- {"i64.trunc_u:sat/f64", TokenType::Convert, Opcode::I64TruncSatF64U},
-#line 501 "src/lexer-keywords.txt"
- {"i32.trunc_u:sat/f64", TokenType::Convert, Opcode::I32TruncSatF64U},
+ {""},
#line 310 "src/lexer-keywords.txt"
{"i64.atomic.rmw8.cmpxchg_u", TokenType::AtomicRmwCmpxchg, Opcode::I64AtomicRmw8CmpxchgU},
#line 198 "src/lexer-keywords.txt"
{"i32.atomic.rmw8.cmpxchg_u", TokenType::AtomicRmwCmpxchg, Opcode::I32AtomicRmw8CmpxchgU},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 411 "src/lexer-keywords.txt"
- {"i8x16.mul", TokenType::Binary, Opcode::I8X16Mul},
- {""}, {""},
-#line 146 "src/lexer-keywords.txt"
- {"f64x2.sqrt", TokenType::Unary, Opcode::F64X2Sqrt},
{""}, {""}, {""}, {""},
-#line 382 "src/lexer-keywords.txt"
- {"i64x2.any_true", TokenType::Unary, Opcode::I64X2AnyTrue},
- {""}, {""},
-#line 172 "src/lexer-keywords.txt"
- {"i16x8.mul", TokenType::Binary, Opcode::I16X8Mul},
- {""},
+#line 119 "src/lexer-keywords.txt"
+ {"f64.neg", TokenType::Unary, Opcode::F64Neg},
+#line 69 "src/lexer-keywords.txt"
+ {"f32.neg", TokenType::Unary, Opcode::F32Neg},
+ {""}, {""}, {""}, {""}, {""},
+#line 334 "src/lexer-keywords.txt"
+ {"i64.extend16_s", TokenType::Unary, Opcode::I64Extend16S},
+#line 221 "src/lexer-keywords.txt"
+ {"i32.extend16_s", TokenType::Unary, Opcode::I32Extend16S},
+#line 394 "src/lexer-keywords.txt"
+ {"i64.xor", TokenType::Binary, Opcode::I64Xor},
+#line 287 "src/lexer-keywords.txt"
+ {"i32.xor", TokenType::Binary, Opcode::I32Xor},
+#line 467 "src/lexer-keywords.txt"
+ {"unreachable", TokenType::Unreachable, Opcode::Unreachable},
#line 311 "src/lexer-keywords.txt"
{"i64.atomic.rmw8.or_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw8OrU},
#line 199 "src/lexer-keywords.txt"
{"i32.atomic.rmw8.or_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw8OrU},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""},
-#line 392 "src/lexer-keywords.txt"
- {"i64x2.trunc_sat_f64x2_s", TokenType::Unary, Opcode::I64X2TruncSatF64X2S},
+#line 182 "src/lexer-keywords.txt"
+ {"i16x8.sub", TokenType::Binary, Opcode::I16X8Sub},
{""},
-#line 393 "src/lexer-keywords.txt"
- {"i64x2.trunc_sat_f64x2_u", TokenType::Unary, Opcode::I64X2TruncSatF64X2U},
- {""}, {""}, {""}, {""},
-#line 387 "src/lexer-keywords.txt"
- {"i64x2.shr_s", TokenType::Binary, Opcode::I64X2ShrS},
- {""}, {""}, {""},
-#line 388 "src/lexer-keywords.txt"
- {"i64x2.shr_u", TokenType::Binary, Opcode::I64X2ShrU},
-#line 134 "src/lexer-keywords.txt"
- {"f64x2.extract_lane", TokenType::SimdLaneOp, Opcode::F64X2ExtractLane},
- {""}, {""},
-#line 383 "src/lexer-keywords.txt"
- {"i64x2.extract_lane", TokenType::SimdLaneOp, Opcode::I64X2ExtractLane},
+#line 479 "src/lexer-keywords.txt"
+ {"anyfunc", Type::Funcref},
{""}, {""}, {""},
#line 422 "src/lexer-keywords.txt"
{"i8x16", TokenType::I8X16},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""},
+#line 174 "src/lexer-keywords.txt"
+ {"i16x8.ne", TokenType::Compare, Opcode::I16X8Ne},
+ {""},
#line 377 "src/lexer-keywords.txt"
{"i64.trunc_sat_f64_s", TokenType::Convert, Opcode::I64TruncSatF64S},
#line 258 "src/lexer-keywords.txt"
{"i32.trunc_sat_f64_s", TokenType::Convert, Opcode::I32TruncSatF64S},
-#line 514 "src/lexer-keywords.txt"
- {"set_global", TokenType::GlobalSet, Opcode::GlobalSet},
{""},
+#line 19 "src/lexer-keywords.txt"
+ {"assert_exhaustion", TokenType::AssertExhaustion},
#line 378 "src/lexer-keywords.txt"
{"i64.trunc_sat_f64_u", TokenType::Convert, Opcode::I64TruncSatF64U},
#line 259 "src/lexer-keywords.txt"
{"i32.trunc_sat_f64_u", TokenType::Convert, Opcode::I32TruncSatF64U},
-#line 478 "src/lexer-keywords.txt"
- {"anyfunc", Type::Funcref},
-#line 314 "src/lexer-keywords.txt"
- {"i64.atomic.rmw8.xor_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw8XorU},
-#line 202 "src/lexer-keywords.txt"
- {"i32.atomic.rmw8.xor_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw8XorU},
+ {""}, {""},
+#line 307 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw32.xor_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32XorU},
+ {""}, {""}, {""}, {""}, {""}, {""},
+#line 170 "src/lexer-keywords.txt"
+ {"i16x8.lt_s", TokenType::Compare, Opcode::I16X8LtS},
+ {""},
+#line 171 "src/lexer-keywords.txt"
+ {"i16x8.lt_u", TokenType::Compare, Opcode::I16X8LtU},
{""}, {""}, {""},
-#line 334 "src/lexer-keywords.txt"
- {"i64.extend16_s", TokenType::Unary, Opcode::I64Extend16S},
-#line 221 "src/lexer-keywords.txt"
- {"i32.extend16_s", TokenType::Unary, Opcode::I32Extend16S},
+#line 168 "src/lexer-keywords.txt"
+ {"i16x8.le_s", TokenType::Compare, Opcode::I16X8LeS},
+#line 152 "src/lexer-keywords.txt"
+ {"global.get", TokenType::GlobalGet, Opcode::GlobalGet},
+#line 169 "src/lexer-keywords.txt"
+ {"i16x8.le_u", TokenType::Compare, Opcode::I16X8LeU},
+ {""}, {""}, {""}, {""}, {""}, {""},
+#line 336 "src/lexer-keywords.txt"
+ {"i64.extend8_s", TokenType::Unary, Opcode::I64Extend8S},
+#line 222 "src/lexer-keywords.txt"
+ {"i32.extend8_s", TokenType::Unary, Opcode::I32Extend8S},
+ {""}, {""},
+#line 515 "src/lexer-keywords.txt"
+ {"set_global", TokenType::GlobalSet, Opcode::GlobalSet},
+ {""}, {""},
+#line 387 "src/lexer-keywords.txt"
+ {"i64x2.shr_s", TokenType::Binary, Opcode::I64X2ShrS},
+ {""}, {""}, {""},
+#line 388 "src/lexer-keywords.txt"
+ {"i64x2.shr_u", TokenType::Binary, Opcode::I64X2ShrU},
+ {""}, {""}, {""}, {""},
#line 419 "src/lexer-keywords.txt"
{"i8x16.sub_saturate_s", TokenType::Binary, Opcode::I8X16SubSaturateS},
-#line 386 "src/lexer-keywords.txt"
- {"i64x2.shl", TokenType::Binary, Opcode::I64X2Shl},
+ {""},
#line 420 "src/lexer-keywords.txt"
{"i8x16.sub_saturate_u", TokenType::Binary, Opcode::I8X16SubSaturateU},
-#line 466 "src/lexer-keywords.txt"
- {"unreachable", TokenType::Unreachable, Opcode::Unreachable},
- {""},
-#line 433 "src/lexer-keywords.txt"
- {"memory.grow", TokenType::MemoryGrow, Opcode::MemoryGrow},
- {""}, {""}, {""}, {""}, {""},
-#line 180 "src/lexer-keywords.txt"
- {"i16x8.sub_saturate_s", TokenType::Binary, Opcode::I16X8SubSaturateS},
- {""},
-#line 181 "src/lexer-keywords.txt"
- {"i16x8.sub_saturate_u", TokenType::Binary, Opcode::I16X8SubSaturateU},
+ {""}, {""}, {""},
+#line 172 "src/lexer-keywords.txt"
+ {"i16x8.mul", TokenType::Binary, Opcode::I16X8Mul},
+ {""}, {""}, {""},
+#line 398 "src/lexer-keywords.txt"
+ {"i8x16.all_true", TokenType::Unary, Opcode::I8X16AllTrue},
+ {""}, {""},
+#line 386 "src/lexer-keywords.txt"
+ {"i64x2.shl", TokenType::Binary, Opcode::I64X2Shl},
{""}, {""}, {""}, {""},
#line 71 "src/lexer-keywords.txt"
{"f32.reinterpret_i32", TokenType::Convert, Opcode::F32ReinterpretI32},
- {""}, {""}, {""},
-#line 395 "src/lexer-keywords.txt"
- {"i8x16.add_saturate_s", TokenType::Binary, Opcode::I8X16AddSaturateS},
- {""},
-#line 396 "src/lexer-keywords.txt"
- {"i8x16.add_saturate_u", TokenType::Binary, Opcode::I8X16AddSaturateU},
- {""}, {""}, {""},
-#line 115 "src/lexer-keywords.txt"
- {"f64.max", TokenType::Binary, Opcode::F64Max},
-#line 65 "src/lexer-keywords.txt"
- {"f32.max", TokenType::Binary, Opcode::F32Max},
- {""}, {""}, {""},
-#line 156 "src/lexer-keywords.txt"
- {"i16x8.add_saturate_s", TokenType::Binary, Opcode::I16X8AddSaturateS},
{""},
-#line 157 "src/lexer-keywords.txt"
- {"i16x8.add_saturate_u", TokenType::Binary, Opcode::I16X8AddSaturateU},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 486 "src/lexer-keywords.txt"
+#line 487 "src/lexer-keywords.txt"
{"f64.convert_s/i64", TokenType::Convert, Opcode::F64ConvertI64S},
-#line 480 "src/lexer-keywords.txt"
+#line 481 "src/lexer-keywords.txt"
{"f32.convert_s/i64", TokenType::Convert, Opcode::F32ConvertI64S},
-#line 488 "src/lexer-keywords.txt"
+#line 489 "src/lexer-keywords.txt"
{"f64.convert_u/i64", TokenType::Convert, Opcode::F64ConvertI64U},
-#line 482 "src/lexer-keywords.txt"
+#line 483 "src/lexer-keywords.txt"
{"f32.convert_u/i64", TokenType::Convert, Opcode::F32ConvertI64U},
-#line 398 "src/lexer-keywords.txt"
- {"i8x16.all_true", TokenType::Unary, Opcode::I8X16AllTrue},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 336 "src/lexer-keywords.txt"
- {"i64.extend8_s", TokenType::Unary, Opcode::I64Extend8S},
-#line 222 "src/lexer-keywords.txt"
- {"i32.extend8_s", TokenType::Unary, Opcode::I32Extend8S},
-#line 484 "src/lexer-keywords.txt"
- {"f32.reinterpret/i32", TokenType::Convert, Opcode::F32ReinterpretI32},
{""},
-#line 159 "src/lexer-keywords.txt"
- {"i16x8.all_true", TokenType::Unary, Opcode::I16X8AllTrue},
+#line 94 "src/lexer-keywords.txt"
+ {"f32x4.splat", TokenType::Unary, Opcode::F32X4Splat},
+#line 158 "src/lexer-keywords.txt"
+ {"i16x8.add", TokenType::Binary, Opcode::I16X8Add},
+ {""},
+#line 282 "src/lexer-keywords.txt"
+ {"i32x4.splat", TokenType::Unary, Opcode::I32X4Splat},
+#line 509 "src/lexer-keywords.txt"
+ {"i64.trunc_s:sat/f32", TokenType::Convert, Opcode::I64TruncSatF32S},
+#line 497 "src/lexer-keywords.txt"
+ {"i32.trunc_s:sat/f32", TokenType::Convert, Opcode::I32TruncSatF32S},
+#line 513 "src/lexer-keywords.txt"
+ {"i64.trunc_u:sat/f32", TokenType::Convert, Opcode::I64TruncSatF32U},
+#line 501 "src/lexer-keywords.txt"
+ {"i32.trunc_u:sat/f32", TokenType::Convert, Opcode::I32TruncSatF32U},
+ {""},
+#line 142 "src/lexer-keywords.txt"
+ {"f64x2.neg", TokenType::Unary, Opcode::F64X2Neg},
{""}, {""},
-#line 300 "src/lexer-keywords.txt"
- {"i64.atomic.rmw16.xor_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16XorU},
-#line 195 "src/lexer-keywords.txt"
- {"i32.atomic.rmw16.xor_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16XorU},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 384 "src/lexer-keywords.txt"
+ {"i64x2.neg", TokenType::Unary, Opcode::I64X2Neg},
+ {""}, {""},
+#line 134 "src/lexer-keywords.txt"
+ {"f64x2.extract_lane", TokenType::SimdLaneOp, Opcode::F64X2ExtractLane},
+ {""}, {""},
+#line 383 "src/lexer-keywords.txt"
+ {"i64x2.extract_lane", TokenType::SimdLaneOp, Opcode::I64X2ExtractLane},
{""}, {""}, {""}, {""},
#line 121 "src/lexer-keywords.txt"
{"f64.promote_f32", TokenType::Convert, Opcode::F64PromoteF32},
+ {""}, {""}, {""},
+#line 485 "src/lexer-keywords.txt"
+ {"f32.reinterpret/i32", TokenType::Convert, Opcode::F32ReinterpretI32},
{""}, {""},
+#line 439 "src/lexer-keywords.txt"
+ {"nop", TokenType::Nop, Opcode::Nop},
+ {""}, {""}, {""}, {""}, {""},
+#line 95 "src/lexer-keywords.txt"
+ {"f32x4.sqrt", TokenType::Unary, Opcode::F32X4Sqrt},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""},
#line 122 "src/lexer-keywords.txt"
{"f64.reinterpret_i64", TokenType::Convert, Opcode::F64ReinterpretI64},
+#line 395 "src/lexer-keywords.txt"
+ {"i8x16.add_saturate_s", TokenType::Binary, Opcode::I8X16AddSaturateS},
+ {""},
+#line 396 "src/lexer-keywords.txt"
+ {"i8x16.add_saturate_u", TokenType::Binary, Opcode::I8X16AddSaturateU},
+#line 392 "src/lexer-keywords.txt"
+ {"i64x2.trunc_sat_f64x2_s", TokenType::Unary, Opcode::I64X2TruncSatF64X2S},
+ {""},
+#line 393 "src/lexer-keywords.txt"
+ {"i64x2.trunc_sat_f64x2_u", TokenType::Unary, Opcode::I64X2TruncSatF64X2U},
+ {""},
+#line 490 "src/lexer-keywords.txt"
+ {"f64.promote/f32", TokenType::Convert, Opcode::F64PromoteF32},
{""}, {""}, {""},
+#line 510 "src/lexer-keywords.txt"
+ {"i64.trunc_s:sat/f64", TokenType::Convert, Opcode::I64TruncSatF64S},
+#line 498 "src/lexer-keywords.txt"
+ {"i32.trunc_s:sat/f64", TokenType::Convert, Opcode::I32TruncSatF64S},
+#line 514 "src/lexer-keywords.txt"
+ {"i64.trunc_u:sat/f64", TokenType::Convert, Opcode::I64TruncSatF64U},
+#line 502 "src/lexer-keywords.txt"
+ {"i32.trunc_u:sat/f64", TokenType::Convert, Opcode::I32TruncSatF64U},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 115 "src/lexer-keywords.txt"
+ {"f64.max", TokenType::Binary, Opcode::F64Max},
+#line 65 "src/lexer-keywords.txt"
+ {"f32.max", TokenType::Binary, Opcode::F32Max},
+ {""},
#line 299 "src/lexer-keywords.txt"
{"i64.atomic.rmw16.xchg_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16XchgU},
#line 194 "src/lexer-keywords.txt"
{"i32.atomic.rmw16.xchg_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16XchgU},
- {""}, {""}, {""}, {""},
#line 405 "src/lexer-keywords.txt"
{"i8x16.gt_s", TokenType::Compare, Opcode::I8X16GtS},
- {""},
+#line 144 "src/lexer-keywords.txt"
+ {"f64x2.replace_lane", TokenType::SimdLaneOp, Opcode::F64X2ReplaceLane},
#line 406 "src/lexer-keywords.txt"
{"i8x16.gt_u", TokenType::Compare, Opcode::I8X16GtU},
-#line 22 "src/lexer-keywords.txt"
- {"assert_return_arithmetic_nan", TokenType::AssertReturnArithmeticNan},
- {""}, {""},
+ {""},
+#line 385 "src/lexer-keywords.txt"
+ {"i64x2.replace_lane", TokenType::SimdLaneOp, Opcode::I64X2ReplaceLane},
+#line 491 "src/lexer-keywords.txt"
+ {"f64.reinterpret/i64", TokenType::Convert, Opcode::F64ReinterpretI64},
#line 403 "src/lexer-keywords.txt"
{"i8x16.ge_s", TokenType::Compare, Opcode::I8X16GeS},
{""},
#line 404 "src/lexer-keywords.txt"
{"i8x16.ge_u", TokenType::Compare, Opcode::I8X16GeU},
+ {""}, {""}, {""},
+#line 382 "src/lexer-keywords.txt"
+ {"i64x2.any_true", TokenType::Unary, Opcode::I64X2AnyTrue},
+ {""}, {""}, {""}, {""}, {""}, {""},
+#line 22 "src/lexer-keywords.txt"
+ {"assert_return_arithmetic_nan", TokenType::AssertReturnArithmeticNan},
+ {""},
+#line 314 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw8.xor_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw8XorU},
+#line 202 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw8.xor_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw8XorU},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""},
+#line 180 "src/lexer-keywords.txt"
+ {"i16x8.sub_saturate_s", TokenType::Binary, Opcode::I16X8SubSaturateS},
+ {""},
+#line 181 "src/lexer-keywords.txt"
+ {"i16x8.sub_saturate_u", TokenType::Binary, Opcode::I16X8SubSaturateU},
+ {""}, {""}, {""}, {""}, {""},
+#line 108 "src/lexer-keywords.txt"
+ {"f64.eq", TokenType::Compare, Opcode::F64Eq},
+#line 58 "src/lexer-keywords.txt"
+ {"f32.eq", TokenType::Compare, Opcode::F32Eq},
+#line 159 "src/lexer-keywords.txt"
+ {"i16x8.all_true", TokenType::Unary, Opcode::I16X8AllTrue},
+#line 332 "src/lexer-keywords.txt"
+ {"i64.eq", TokenType::Compare, Opcode::I64Eq},
+#line 219 "src/lexer-keywords.txt"
+ {"i32.eq", TokenType::Compare, Opcode::I32Eq},
+ {""}, {""},
+#line 300 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw16.xor_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16XorU},
+#line 195 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw16.xor_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16XorU},
+ {""}, {""}, {""}, {""}, {""},
+#line 280 "src/lexer-keywords.txt"
+ {"i32x4.shr_s", TokenType::Binary, Opcode::I32X4ShrS},
+ {""}, {""}, {""},
+#line 281 "src/lexer-keywords.txt"
+ {"i32x4.shr_u", TokenType::Binary, Opcode::I32X4ShrU},
+#line 183 "src/lexer-keywords.txt"
+ {"i16x8", TokenType::I16X8},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 279 "src/lexer-keywords.txt"
+ {"i32x4.shl", TokenType::Binary, Opcode::I32X4Shl},
+ {""}, {""}, {""}, {""}, {""}, {""},
+#line 285 "src/lexer-keywords.txt"
+ {"i32x4.trunc_sat_f32x4_s", TokenType::Unary, Opcode::I32X4TruncSatF32X4S},
+#line 25 "src/lexer-keywords.txt"
+ {"assert_trap", TokenType::AssertTrap},
+#line 286 "src/lexer-keywords.txt"
+ {"i32x4.trunc_sat_f32x4_u", TokenType::Unary, Opcode::I32X4TruncSatF32X4U},
+ {""}, {""}, {""},
+#line 324 "src/lexer-keywords.txt"
+ {"i64.atomic.store8", TokenType::AtomicStore, Opcode::I64AtomicStore8},
+#line 211 "src/lexer-keywords.txt"
+ {"i32.atomic.store8", TokenType::AtomicStore, Opcode::I32AtomicStore8},
+ {""}, {""}, {""}, {""}, {""}, {""},
#line 91 "src/lexer-keywords.txt"
{"f32x4.neg", TokenType::Unary, Opcode::F32X4Neg},
+ {""}, {""},
+#line 276 "src/lexer-keywords.txt"
+ {"i32x4.neg", TokenType::Unary, Opcode::I32X4Neg},
+#line 357 "src/lexer-keywords.txt"
+ {"i64.popcnt", TokenType::Unary, Opcode::I64Popcnt},
+#line 239 "src/lexer-keywords.txt"
+ {"i32.popcnt", TokenType::Unary, Opcode::I32Popcnt},
+#line 83 "src/lexer-keywords.txt"
+ {"f32x4.extract_lane", TokenType::SimdLaneOp, Opcode::F32X4ExtractLane},
+ {""}, {""},
+#line 266 "src/lexer-keywords.txt"
+ {"i32x4.extract_lane", TokenType::SimdLaneOp, Opcode::I32X4ExtractLane},
+#line 156 "src/lexer-keywords.txt"
+ {"i16x8.add_saturate_s", TokenType::Binary, Opcode::I16X8AddSaturateS},
+ {""},
+#line 157 "src/lexer-keywords.txt"
+ {"i16x8.add_saturate_u", TokenType::Binary, Opcode::I16X8AddSaturateU},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 433 "src/lexer-keywords.txt"
+ {"memory.grow", TokenType::MemoryGrow, Opcode::MemoryGrow},
+ {""}, {""},
+#line 139 "src/lexer-keywords.txt"
+ {"f64x2.max", TokenType::Binary, Opcode::F64X2Max},
+ {""}, {""},
+#line 41 "src/lexer-keywords.txt"
+ {"elem.drop", TokenType::ElemDrop, Opcode::ElemDrop},
+#line 38 "src/lexer-keywords.txt"
+ {"data.drop", TokenType::DataDrop, Opcode::DataDrop},
{""},
#line 166 "src/lexer-keywords.txt"
{"i16x8.gt_s", TokenType::Compare, Opcode::I16X8GtS},
-#line 276 "src/lexer-keywords.txt"
- {"i32x4.neg", TokenType::Unary, Opcode::I32X4Neg},
+ {""},
#line 167 "src/lexer-keywords.txt"
{"i16x8.gt_u", TokenType::Compare, Opcode::I16X8GtU},
{""}, {""}, {""},
@@ -1171,254 +1264,182 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{""},
#line 165 "src/lexer-keywords.txt"
{"i16x8.ge_u", TokenType::Compare, Opcode::I16X8GeU},
-#line 144 "src/lexer-keywords.txt"
- {"f64x2.replace_lane", TokenType::SimdLaneOp, Opcode::F64X2ReplaceLane},
- {""}, {""},
-#line 385 "src/lexer-keywords.txt"
- {"i64x2.replace_lane", TokenType::SimdLaneOp, Opcode::I64X2ReplaceLane},
-#line 489 "src/lexer-keywords.txt"
- {"f64.promote/f32", TokenType::Convert, Opcode::F64PromoteF32},
- {""}, {""},
-#line 490 "src/lexer-keywords.txt"
- {"f64.reinterpret/i64", TokenType::Convert, Opcode::F64ReinterpretI64},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 139 "src/lexer-keywords.txt"
- {"f64x2.max", TokenType::Binary, Opcode::F64X2Max},
-#line 94 "src/lexer-keywords.txt"
- {"f32x4.splat", TokenType::Unary, Opcode::F32X4Splat},
- {""}, {""},
-#line 282 "src/lexer-keywords.txt"
- {"i32x4.splat", TokenType::Unary, Opcode::I32X4Splat},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 464 "src/lexer-keywords.txt"
- {"try", TokenType::Try, Opcode::Try},
- {""}, {""}, {""}, {""}, {""},
-#line 285 "src/lexer-keywords.txt"
- {"i32x4.trunc_sat_f32x4_s", TokenType::Unary, Opcode::I32X4TruncSatF32X4S},
- {""},
-#line 286 "src/lexer-keywords.txt"
- {"i32x4.trunc_sat_f32x4_u", TokenType::Unary, Opcode::I32X4TruncSatF32X4U},
+ {""}, {""}, {""},
+#line 418 "src/lexer-keywords.txt"
+ {"i8x16.splat", TokenType::Unary, Opcode::I8X16Splat},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
-#line 436 "src/lexer-keywords.txt"
- {"memory", TokenType::Memory},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 439 "src/lexer-keywords.txt"
- {"nop", TokenType::Nop, Opcode::Nop},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 28 "src/lexer-keywords.txt"
- {"binary", TokenType::Bin},
{""},
-#line 95 "src/lexer-keywords.txt"
- {"f32x4.sqrt", TokenType::Unary, Opcode::F32X4Sqrt},
- {""}, {""}, {""},
-#line 183 "src/lexer-keywords.txt"
- {"i16x8", TokenType::I16X8},
+#line 93 "src/lexer-keywords.txt"
+ {"f32x4.replace_lane", TokenType::SimdLaneOp, Opcode::F32X4ReplaceLane},
+ {""}, {""},
+#line 278 "src/lexer-keywords.txt"
+ {"i32x4.replace_lane", TokenType::SimdLaneOp, Opcode::I32X4ReplaceLane},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 264 "src/lexer-keywords.txt"
{"i32x4.any_true", TokenType::Unary, Opcode::I32X4AnyTrue},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""},
-#line 280 "src/lexer-keywords.txt"
- {"i32x4.shr_s", TokenType::Binary, Opcode::I32X4ShrS},
- {""}, {""}, {""},
-#line 281 "src/lexer-keywords.txt"
- {"i32x4.shr_u", TokenType::Binary, Opcode::I32X4ShrU},
-#line 83 "src/lexer-keywords.txt"
- {"f32x4.extract_lane", TokenType::SimdLaneOp, Opcode::F32X4ExtractLane},
{""},
-#line 491 "src/lexer-keywords.txt"
+#line 456 "src/lexer-keywords.txt"
+ {"table.copy", TokenType::TableCopy, Opcode::TableCopy},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 492 "src/lexer-keywords.txt"
{"get_global", TokenType::GlobalGet, Opcode::GlobalGet},
-#line 266 "src/lexer-keywords.txt"
- {"i32x4.extract_lane", TokenType::SimdLaneOp, Opcode::I32X4ExtractLane},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""},
+#line 133 "src/lexer-keywords.txt"
+ {"f64x2.eq", TokenType::Compare, Opcode::F64X2Eq},
+ {""}, {""}, {""},
#line 240 "src/lexer-keywords.txt"
{"i32.reinterpret_f32", TokenType::Convert, Opcode::I32ReinterpretF32},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 324 "src/lexer-keywords.txt"
- {"i64.atomic.store8", TokenType::AtomicStore, Opcode::I64AtomicStore8},
-#line 211 "src/lexer-keywords.txt"
- {"i32.atomic.store8", TokenType::AtomicStore, Opcode::I32AtomicStore8},
- {""},
-#line 279 "src/lexer-keywords.txt"
- {"i32x4.shl", TokenType::Binary, Opcode::I32X4Shl},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""},
-#line 25 "src/lexer-keywords.txt"
- {"assert_trap", TokenType::AssertTrap},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 493 "src/lexer-keywords.txt"
- {"i32.reinterpret/f32", TokenType::Convert, Opcode::I32ReinterpretF32},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""},
-#line 358 "src/lexer-keywords.txt"
- {"i64.reinterpret_f64", TokenType::Convert, Opcode::I64ReinterpretF64},
+#line 465 "src/lexer-keywords.txt"
+ {"try", TokenType::Try, Opcode::Try},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""},
-#line 455 "src/lexer-keywords.txt"
- {"table.copy", TokenType::TableCopy, Opcode::TableCopy},
- {""}, {""}, {""}, {""},
-#line 108 "src/lexer-keywords.txt"
- {"f64.eq", TokenType::Compare, Opcode::F64Eq},
-#line 58 "src/lexer-keywords.txt"
- {"f32.eq", TokenType::Compare, Opcode::F32Eq},
- {""},
-#line 332 "src/lexer-keywords.txt"
- {"i64.eq", TokenType::Compare, Opcode::I64Eq},
-#line 219 "src/lexer-keywords.txt"
- {"i32.eq", TokenType::Compare, Opcode::I32Eq},
- {""}, {""},
-#line 38 "src/lexer-keywords.txt"
- {"data.drop", TokenType::DataDrop, Opcode::DataDrop},
-#line 505 "src/lexer-keywords.txt"
- {"i64.reinterpret/f64", TokenType::Convert, Opcode::I64ReinterpretF64},
- {""},
-#line 41 "src/lexer-keywords.txt"
- {"elem.drop", TokenType::ElemDrop, Opcode::ElemDrop},
-#line 261 "src/lexer-keywords.txt"
- {"i32.wrap_i64", TokenType::Convert, Opcode::I32WrapI64},
{""}, {""}, {""}, {""},
-#line 412 "src/lexer-keywords.txt"
- {"i8x16.neg", TokenType::Unary, Opcode::I8X16Neg},
+#line 436 "src/lexer-keywords.txt"
+ {"memory", TokenType::Memory},
+ {""}, {""}, {""},
+#line 494 "src/lexer-keywords.txt"
+ {"i32.reinterpret/f32", TokenType::Convert, Opcode::I32ReinterpretF32},
#line 321 "src/lexer-keywords.txt"
{"i64.atomic.rmw.xor", TokenType::AtomicRmw, Opcode::I64AtomicRmwXor},
#line 209 "src/lexer-keywords.txt"
{"i32.atomic.rmw.xor", TokenType::AtomicRmw, Opcode::I32AtomicRmwXor},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 173 "src/lexer-keywords.txt"
- {"i16x8.neg", TokenType::Unary, Opcode::I16X8Neg},
- {""},
-#line 93 "src/lexer-keywords.txt"
- {"f32x4.replace_lane", TokenType::SimdLaneOp, Opcode::F32X4ReplaceLane},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""},
-#line 278 "src/lexer-keywords.txt"
- {"i32x4.replace_lane", TokenType::SimdLaneOp, Opcode::I32X4ReplaceLane},
+#line 28 "src/lexer-keywords.txt"
+ {"binary", TokenType::Bin},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 358 "src/lexer-keywords.txt"
+ {"i64.reinterpret_f64", TokenType::Convert, Opcode::I64ReinterpretF64},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 261 "src/lexer-keywords.txt"
+ {"i32.wrap_i64", TokenType::Convert, Opcode::I32WrapI64},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 416 "src/lexer-keywords.txt"
+ {"i8x16.shr_s", TokenType::Binary, Opcode::I8X16ShrS},
+ {""}, {""}, {""},
+#line 417 "src/lexer-keywords.txt"
+ {"i8x16.shr_u", TokenType::Binary, Opcode::I8X16ShrU},
{""},
-#line 418 "src/lexer-keywords.txt"
- {"i8x16.splat", TokenType::Unary, Opcode::I8X16Splat},
+#line 179 "src/lexer-keywords.txt"
+ {"i16x8.splat", TokenType::Unary, Opcode::I16X8Splat},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 506 "src/lexer-keywords.txt"
+ {"i64.reinterpret/f64", TokenType::Convert, Opcode::I64ReinterpretF64},
+ {""}, {""}, {""}, {""},
#line 88 "src/lexer-keywords.txt"
{"f32x4.max", TokenType::Binary, Opcode::F32X4Max},
- {""}, {""}, {""},
-#line 502 "src/lexer-keywords.txt"
+ {""}, {""},
+#line 415 "src/lexer-keywords.txt"
+ {"i8x16.shl", TokenType::Binary, Opcode::I8X16Shl},
+ {""},
+#line 503 "src/lexer-keywords.txt"
{"i32.wrap/i64", TokenType::Convert, Opcode::I32WrapI64},
- {""}, {""}, {""}, {""}, {""},
-#line 179 "src/lexer-keywords.txt"
- {"i16x8.splat", TokenType::Unary, Opcode::I16X8Splat},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 357 "src/lexer-keywords.txt"
- {"i64.popcnt", TokenType::Unary, Opcode::I64Popcnt},
-#line 239 "src/lexer-keywords.txt"
- {"i32.popcnt", TokenType::Unary, Opcode::I32Popcnt},
- {""},
+ {""}, {""}, {""},
#line 79 "src/lexer-keywords.txt"
{"f32x4.convert_i32x4_s", TokenType::Unary, Opcode::F32X4ConvertI32X4S},
{""},
#line 80 "src/lexer-keywords.txt"
{"f32x4.convert_i32x4_u", TokenType::Unary, Opcode::F32X4ConvertI32X4U},
{""}, {""}, {""}, {""}, {""}, {""},
-#line 37 "src/lexer-keywords.txt"
- {"current_memory", TokenType::MemorySize, Opcode::MemorySize},
- {""}, {""}, {""}, {""}, {""},
-#line 27 "src/lexer-keywords.txt"
- {"atomic.notify", TokenType::AtomicNotify, Opcode::AtomicNotify},
+#line 412 "src/lexer-keywords.txt"
+ {"i8x16.neg", TokenType::Unary, Opcode::I8X16Neg},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""},
-#line 399 "src/lexer-keywords.txt"
- {"i8x16.any_true", TokenType::Unary, Opcode::I8X16AnyTrue},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 133 "src/lexer-keywords.txt"
- {"f64x2.eq", TokenType::Compare, Opcode::F64X2Eq},
- {""}, {""},
-#line 160 "src/lexer-keywords.txt"
- {"i16x8.any_true", TokenType::Unary, Opcode::I16X8AnyTrue},
- {""}, {""}, {""},
-#line 416 "src/lexer-keywords.txt"
- {"i8x16.shr_s", TokenType::Binary, Opcode::I8X16ShrS},
- {""}, {""}, {""},
-#line 417 "src/lexer-keywords.txt"
- {"i8x16.shr_u", TokenType::Binary, Opcode::I8X16ShrU},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 177 "src/lexer-keywords.txt"
- {"i16x8.shr_s", TokenType::Binary, Opcode::I16X8ShrS},
#line 401 "src/lexer-keywords.txt"
{"i8x16.extract_lane_s", TokenType::SimdLaneOp, Opcode::I8X16ExtractLaneS},
{""},
#line 402 "src/lexer-keywords.txt"
{"i8x16.extract_lane_u", TokenType::SimdLaneOp, Opcode::I8X16ExtractLaneU},
-#line 178 "src/lexer-keywords.txt"
- {"i16x8.shr_u", TokenType::Binary, Opcode::I16X8ShrU},
- {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""},
+#line 82 "src/lexer-keywords.txt"
+ {"f32x4.eq", TokenType::Compare, Opcode::F32X4Eq},
+ {""}, {""},
+#line 265 "src/lexer-keywords.txt"
+ {"i32x4.eq", TokenType::Compare, Opcode::I32X4Eq},
+ {""}, {""},
#line 130 "src/lexer-keywords.txt"
{"f64x2.convert_i64x2_s", TokenType::Unary, Opcode::F64X2ConvertI64X2S},
-#line 162 "src/lexer-keywords.txt"
- {"i16x8.extract_lane_s", TokenType::SimdLaneOp, Opcode::I16X8ExtractLaneS},
+ {""},
#line 131 "src/lexer-keywords.txt"
{"f64x2.convert_i64x2_u", TokenType::Unary, Opcode::F64X2ConvertI64X2U},
-#line 163 "src/lexer-keywords.txt"
- {"i16x8.extract_lane_u", TokenType::SimdLaneOp, Opcode::I16X8ExtractLaneU},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 477 "src/lexer-keywords.txt"
+ {"v8x16.shuffle", TokenType::SimdShuffleOp, Opcode::V8X16Shuffle},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
-#line 415 "src/lexer-keywords.txt"
- {"i8x16.shl", TokenType::Binary, Opcode::I8X16Shl},
+#line 414 "src/lexer-keywords.txt"
+ {"i8x16.replace_lane", TokenType::SimdLaneOp, Opcode::I8X16ReplaceLane},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 399 "src/lexer-keywords.txt"
+ {"i8x16.any_true", TokenType::Unary, Opcode::I8X16AnyTrue},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
+ {""}, {""}, {""}, {""}, {""},
+#line 177 "src/lexer-keywords.txt"
+ {"i16x8.shr_s", TokenType::Binary, Opcode::I16X8ShrS},
+ {""}, {""}, {""},
+#line 178 "src/lexer-keywords.txt"
+ {"i16x8.shr_u", TokenType::Binary, Opcode::I16X8ShrU},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 176 "src/lexer-keywords.txt"
{"i16x8.shl", TokenType::Binary, Opcode::I16X8Shl},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 37 "src/lexer-keywords.txt"
+ {"current_memory", TokenType::MemorySize, Opcode::MemorySize},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 106 "src/lexer-keywords.txt"
- {"f64.copysign", TokenType::Binary, Opcode::F64Copysign},
-#line 55 "src/lexer-keywords.txt"
- {"f32.copysign", TokenType::Binary, Opcode::F32Copysign},
+ {""}, {""}, {""}, {""}, {""},
+#line 173 "src/lexer-keywords.txt"
+ {"i16x8.neg", TokenType::Unary, Opcode::I16X8Neg},
+ {""}, {""}, {""}, {""}, {""}, {""},
#line 313 "src/lexer-keywords.txt"
{"i64.atomic.rmw8.xchg_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw8XchgU},
#line 201 "src/lexer-keywords.txt"
{"i32.atomic.rmw8.xchg_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw8XchgU},
+ {""}, {""},
+#line 162 "src/lexer-keywords.txt"
+ {"i16x8.extract_lane_s", TokenType::SimdLaneOp, Opcode::I16X8ExtractLaneS},
+ {""},
+#line 163 "src/lexer-keywords.txt"
+ {"i16x8.extract_lane_u", TokenType::SimdLaneOp, Opcode::I16X8ExtractLaneU},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 155 "src/lexer-keywords.txt"
- {"grow_memory", TokenType::MemoryGrow, Opcode::MemoryGrow},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""},
+#line 27 "src/lexer-keywords.txt"
+ {"atomic.notify", TokenType::AtomicNotify, Opcode::AtomicNotify},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 476 "src/lexer-keywords.txt"
- {"v8x16.shuffle", TokenType::SimdShuffleOp, Opcode::V8X16Shuffle},
- {""}, {""}, {""},
#line 317 "src/lexer-keywords.txt"
{"i64.atomic.rmw.cmpxchg", TokenType::AtomicRmwCmpxchg, Opcode::I64AtomicRmwCmpxchg},
#line 205 "src/lexer-keywords.txt"
{"i32.atomic.rmw.cmpxchg", TokenType::AtomicRmwCmpxchg, Opcode::I32AtomicRmwCmpxchg},
- {""},
-#line 414 "src/lexer-keywords.txt"
- {"i8x16.replace_lane", TokenType::SimdLaneOp, Opcode::I8X16ReplaceLane},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""},
#line 175 "src/lexer-keywords.txt"
{"i16x8.replace_lane", TokenType::SimdLaneOp, Opcode::I16X8ReplaceLane},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 160 "src/lexer-keywords.txt"
+ {"i16x8.any_true", TokenType::Unary, Opcode::I16X8AnyTrue},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 106 "src/lexer-keywords.txt"
+ {"f64.copysign", TokenType::Binary, Opcode::F64Copysign},
+#line 55 "src/lexer-keywords.txt"
+ {"f32.copysign", TokenType::Binary, Opcode::F32Copysign},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 400 "src/lexer-keywords.txt"
+ {"i8x16.eq", TokenType::Compare, Opcode::I8X16Eq},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 82 "src/lexer-keywords.txt"
- {"f32x4.eq", TokenType::Compare, Opcode::F32X4Eq},
- {""}, {""},
-#line 265 "src/lexer-keywords.txt"
- {"i32x4.eq", TokenType::Compare, Opcode::I32X4Eq},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
@@ -1426,21 +1447,20 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
-#line 431 "src/lexer-keywords.txt"
- {"memory.copy", TokenType::MemoryCopy, Opcode::MemoryCopy},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 155 "src/lexer-keywords.txt"
+ {"grow_memory", TokenType::MemoryGrow, Opcode::MemoryGrow},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""},
+#line 161 "src/lexer-keywords.txt"
+ {"i16x8.eq", TokenType::Compare, Opcode::I16X8Eq},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 320 "src/lexer-keywords.txt"
- {"i64.atomic.rmw.xchg", TokenType::AtomicRmw, Opcode::I64AtomicRmwXchg},
-#line 208 "src/lexer-keywords.txt"
- {"i32.atomic.rmw.xchg", TokenType::AtomicRmw, Opcode::I32AtomicRmwXchg},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
@@ -1452,13 +1472,19 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
-#line 400 "src/lexer-keywords.txt"
- {"i8x16.eq", TokenType::Compare, Opcode::I8X16Eq},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
-#line 161 "src/lexer-keywords.txt"
- {"i16x8.eq", TokenType::Compare, Opcode::I16X8Eq}
+#line 431 "src/lexer-keywords.txt"
+ {"memory.copy", TokenType::MemoryCopy, Opcode::MemoryCopy},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""},
+#line 320 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw.xchg", TokenType::AtomicRmw, Opcode::I64AtomicRmwXchg},
+#line 208 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw.xchg", TokenType::AtomicRmw, Opcode::I32AtomicRmwXchg}
};
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
diff --git a/src/resolve-names.cc b/src/resolve-names.cc
index 568fb7fe..1bcc52e6 100644
--- a/src/resolve-names.cc
+++ b/src/resolve-names.cc
@@ -447,8 +447,11 @@ void NameResolver::VisitEvent(Event* event) {
void NameResolver::VisitElemSegment(ElemSegment* segment) {
ResolveTableVar(&segment->table_var);
visitor_.VisitExprList(segment->offset);
- for (Var& var : segment->vars)
- ResolveFuncVar(&var);
+ for (ElemExpr& elem_expr : segment->elem_exprs) {
+ if (elem_expr.kind == ElemExprKind::RefFunc) {
+ ResolveFuncVar(&elem_expr.var);
+ }
+ }
}
void NameResolver::VisitDataSegment(DataSegment* segment) {
diff --git a/src/token.def b/src/token.def
index e4a968ba..5bcc66dd 100644
--- a/src/token.def
+++ b/src/token.def
@@ -74,11 +74,11 @@ WABT_TOKEN_LAST(Literal, Nat)
/* Tokens with Opcode data. */
WABT_TOKEN(AtomicLoad, "ATOMIC_LOAD")
+WABT_TOKEN(AtomicNotify, "ATOMIC_NOTIFY")
WABT_TOKEN(AtomicRmw, "ATOMIC_RMW")
WABT_TOKEN(AtomicRmwCmpxchg, "ATOMIC_RMW_CMPXCHG")
WABT_TOKEN(AtomicStore, "ATOMIC_STORE")
WABT_TOKEN(AtomicWait, "ATOMIC_WAIT")
-WABT_TOKEN(AtomicNotify, "ATOMIC_NOTIFY")
WABT_TOKEN(Binary, "BINARY")
WABT_TOKEN(Block, "block")
WABT_TOKEN(Br, "br")
@@ -91,41 +91,42 @@ WABT_TOKEN(Catch, "catch")
WABT_TOKEN(Compare, "COMPARE")
WABT_TOKEN(Const, "CONST")
WABT_TOKEN(Convert, "CONVERT")
+WABT_TOKEN(DataDrop, "data.drop")
WABT_TOKEN(Drop, "drop")
+WABT_TOKEN(ElemDrop, "elem.drop")
WABT_TOKEN(Else, "else")
WABT_TOKEN(End, "end")
WABT_TOKEN(GlobalGet, "global.get")
-WABT_TOKEN(LocalGet, "local.get")
+WABT_TOKEN(GlobalSet, "global.set")
WABT_TOKEN(If, "if")
WABT_TOKEN(Load, "LOAD")
+WABT_TOKEN(LocalGet, "local.get")
+WABT_TOKEN(LocalSet, "local.set")
+WABT_TOKEN(LocalTee, "local.tee")
WABT_TOKEN(Loop, "loop")
WABT_TOKEN(MemoryCopy, "memory.copy")
-WABT_TOKEN(DataDrop, "data.drop")
WABT_TOKEN(MemoryFill, "memory.fill")
WABT_TOKEN(MemoryGrow, "memory.grow")
WABT_TOKEN(MemoryInit, "memory.init")
WABT_TOKEN(MemorySize, "memory.size")
-WABT_TOKEN(TableCopy, "table.copy")
-WABT_TOKEN(ElemDrop, "elem.drop")
-WABT_TOKEN(TableInit, "table.init")
-WABT_TOKEN(TableGet, "table.get")
-WABT_TOKEN(TableSet, "table.set")
-WABT_TOKEN(TableGrow, "table.grow")
-WABT_TOKEN(TableSize, "table.size")
-WABT_TOKEN(RefNull, "ref.null")
-WABT_TOKEN(RefIsNull, "ref.is_null")
WABT_TOKEN(Nop, "nop")
+WABT_TOKEN(RefFunc, "ref.func")
+WABT_TOKEN(RefIsNull, "ref.is_null")
+WABT_TOKEN(RefNull, "ref.null")
WABT_TOKEN(Rethrow, "rethrow")
-WABT_TOKEN(Return, "return")
-WABT_TOKEN(ReturnCall, "return_call")
WABT_TOKEN(ReturnCallIndirect, "return_call_indirect")
+WABT_TOKEN(ReturnCall, "return_call")
+WABT_TOKEN(Return, "return")
WABT_TOKEN(Select, "select")
-WABT_TOKEN(GlobalSet, "global.set")
-WABT_TOKEN(LocalSet, "local.set")
WABT_TOKEN(SimdLaneOp, "SIMDLANEOP")
WABT_TOKEN(SimdShuffleOp, "SIMDSHUFFLEOP")
WABT_TOKEN(Store, "STORE")
-WABT_TOKEN(LocalTee, "local.tee")
+WABT_TOKEN(TableCopy, "table.copy")
+WABT_TOKEN(TableGet, "table.get")
+WABT_TOKEN(TableGrow, "table.grow")
+WABT_TOKEN(TableInit, "table.init")
+WABT_TOKEN(TableSet, "table.set")
+WABT_TOKEN(TableSize, "table.size")
WABT_TOKEN(Ternary, "TERNARY")
WABT_TOKEN(Throw, "throw")
WABT_TOKEN(Try, "try")
diff --git a/src/validator.cc b/src/validator.cc
index a3a21d9b..aaf5308d 100644
--- a/src/validator.cc
+++ b/src/validator.cc
@@ -1120,8 +1120,10 @@ void Validator::CheckElemSegments(const Module* module) {
if (auto elem_segment_field = dyn_cast<ElemSegmentModuleField>(&field)) {
auto&& elem_segment = elem_segment_field->elem_segment;
const Table* table;
- for (const Var& var : elem_segment.vars) {
- CheckFuncVar(&var, nullptr);
+ for (const ElemExpr& elem_expr : elem_segment.elem_exprs) {
+ if (elem_expr.kind == ElemExprKind::RefFunc) {
+ CheckFuncVar(&elem_expr.var, nullptr);
+ }
}
if (elem_segment.passive) {
diff --git a/src/wast-parser.cc b/src/wast-parser.cc
index b7061b83..820fe79a 100644
--- a/src/wast-parser.cc
+++ b/src/wast-parser.cc
@@ -592,20 +592,28 @@ bool WastParser::ParseTextListOpt(std::vector<uint8_t>* out_data) {
Result WastParser::ParseVarList(VarVector* out_var_list) {
WABT_TRACE(ParseVarList);
- if (!ParseVarListOpt(out_var_list)) {
- return Result::Error;
+ Var var;
+ while (ParseVarOpt(&var)) {
+ out_var_list->emplace_back(var);
}
+ return out_var_list->empty() ? Result::Error : Result::Ok;
+}
+Result WastParser::ParseElemExprVarList(ElemExprVector* out_list) {
+ WABT_TRACE(ParseElemExprVarList);
+ if (!ParseElemExprVarListOpt(out_list)) {
+ return Result::Error;
+ }
return Result::Ok;
}
-bool WastParser::ParseVarListOpt(VarVector* out_var_list) {
- WABT_TRACE(ParseVarListOpt);
+bool WastParser::ParseElemExprVarListOpt(ElemExprVector* out_list) {
+ WABT_TRACE(ParseElemExprVarListOpt);
Var var;
- while (ParseVarOpt(&var))
- out_var_list->push_back(var);
-
- return !out_var_list->empty();
+ while (ParseVarOpt(&var)) {
+ out_list->emplace_back(var);
+ }
+ return !out_list->empty();
}
Result WastParser::ParseValueType(Type* out_type) {
@@ -879,11 +887,30 @@ Result WastParser::ParseElemModuleField(Module* module) {
if (Peek() == TokenType::Passive) {
Consume();
field->elem_segment.passive = true;
+ // Parse a potentially empty sequence of ElemExprs.
+ while (true) {
+ Var var;
+ if (MatchLpar(TokenType::RefNull)) {
+ field->elem_segment.elem_exprs.emplace_back();
+ EXPECT(Rpar);
+ } else if (MatchLpar(TokenType::RefFunc)) {
+ CHECK_RESULT(ParseVar(&var));
+ field->elem_segment.elem_exprs.emplace_back(var);
+ EXPECT(Rpar);
+ } else if (ParseVarOpt(&var)) {
+ // TODO: This format will be removed by
+ // https://github.com/WebAssembly/bulk-memory-operations/pull/84
+ field->elem_segment.elem_exprs.emplace_back(var);
+ } else {
+ CHECK_RESULT(ErrorIfLpar({"ref.null", "ref.func"}));
+ break;
+ }
+ }
} else {
ParseVarOpt(&field->elem_segment.table_var, Var(0, loc));
CHECK_RESULT(ParseOffsetExpr(&field->elem_segment.offset));
+ ParseElemExprVarListOpt(&field->elem_segment.elem_exprs);
}
- ParseVarListOpt(&field->elem_segment.vars);
EXPECT(Rpar);
module->AppendField(std::move(field));
return Result::Ok;
@@ -1185,12 +1212,12 @@ Result WastParser::ParseTableModuleField(Module* module) {
elem_segment.table_var = Var(module->tables.size());
elem_segment.offset.push_back(MakeUnique<ConstExpr>(Const::I32(0)));
elem_segment.offset.back().loc = loc;
- CHECK_RESULT(ParseVarList(&elem_segment.vars));
+ CHECK_RESULT(ParseElemExprVarList(&elem_segment.elem_exprs));
EXPECT(Rpar);
auto table_field = MakeUnique<TableModuleField>(loc, name);
- table_field->table.elem_limits.initial = elem_segment.vars.size();
- table_field->table.elem_limits.max = elem_segment.vars.size();
+ table_field->table.elem_limits.initial = elem_segment.elem_exprs.size();
+ table_field->table.elem_limits.max = elem_segment.elem_exprs.size();
table_field->table.elem_limits.has_max = true;
table_field->table.elem_type = elem_type;
module->AppendField(std::move(table_field));
diff --git a/src/wast-parser.h b/src/wast-parser.h
index 2894bfb2..f2e0b102 100644
--- a/src/wast-parser.h
+++ b/src/wast-parser.h
@@ -120,7 +120,8 @@ class WastParser {
Result ParseTextList(std::vector<uint8_t>* out_data);
bool ParseTextListOpt(std::vector<uint8_t>* out_data);
Result ParseVarList(VarVector* out_var_list);
- bool ParseVarListOpt(VarVector* out_var_list);
+ Result ParseElemExprVarList(ElemExprVector* out_list);
+ bool ParseElemExprVarListOpt(ElemExprVector* out_list);
Result ParseValueType(Type* out_type);
Result ParseValueTypeList(TypeVector* out_type_list);
Result ParseRefType(Type* out_type);
diff --git a/src/wat-writer.cc b/src/wat-writer.cc
index 73fc354e..52460fc2 100644
--- a/src/wat-writer.cc
+++ b/src/wat-writer.cc
@@ -1492,8 +1492,20 @@ void WatWriter::WriteElemSegment(const ElemSegment& segment) {
} else {
WriteInitExpr(segment.offset);
}
- for (const Var& var : segment.vars) {
- WriteVar(var, NextChar::Space);
+ for (const ElemExpr& expr : segment.elem_exprs) {
+ if (segment.passive) {
+ if (expr.kind == ElemExprKind::RefNull) {
+ WriteOpenSpace("ref.null");
+ WriteCloseSpace();
+ } else {
+ WriteOpenSpace("ref.func");
+ WriteVar(expr.var, NextChar::Space);
+ WriteCloseSpace();
+ }
+ } else {
+ assert(expr.kind == ElemExprKind::RefFunc);
+ WriteVar(expr.var, NextChar::Space);
+ }
}
WriteCloseNewline();
elem_segment_index_++;