summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gen-s-parser.inc1206
-rw-r--r--src/parser/contexts.h954
-rw-r--r--src/parser/lexer.cpp153
-rw-r--r--src/parser/lexer.h28
-rw-r--r--src/parser/parsers.h1148
-rw-r--r--src/wasm-ir-builder.h7
-rw-r--r--src/wasm/wasm-ir-builder.cpp22
7 files changed, 2332 insertions, 1186 deletions
diff --git a/src/gen-s-parser.inc b/src/gen-s-parser.inc
index 89063ec81..01f138cc0 100644
--- a/src/gen-s-parser.inc
+++ b/src/gen-s-parser.inc
@@ -3632,13 +3632,13 @@ switch (buf[0]) {
switch (buf[6]) {
case 'c':
if (op == "array.copy"sv) {
- CHECK_ERR(makeArrayCopy(ctx, pos));
+ CHECK_ERR(makeArrayCopy(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 'f':
if (op == "array.fill"sv) {
- CHECK_ERR(makeArrayFill(ctx, pos));
+ CHECK_ERR(makeArrayFill(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -3646,7 +3646,7 @@ switch (buf[0]) {
switch (buf[9]) {
case '\0':
if (op == "array.get"sv) {
- CHECK_ERR(makeArrayGet(ctx, pos));
+ CHECK_ERR(makeArrayGet(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -3654,13 +3654,13 @@ switch (buf[0]) {
switch (buf[10]) {
case 's':
if (op == "array.get_s"sv) {
- CHECK_ERR(makeArrayGet(ctx, pos, true));
+ CHECK_ERR(makeArrayGet(ctx, pos, annotations, true));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "array.get_u"sv) {
- CHECK_ERR(makeArrayGet(ctx, pos, false));
+ CHECK_ERR(makeArrayGet(ctx, pos, annotations, false));
return Ok{};
}
goto parse_error;
@@ -3674,13 +3674,13 @@ switch (buf[0]) {
switch (buf[11]) {
case 'd':
if (op == "array.init_data"sv) {
- CHECK_ERR(makeArrayInitData(ctx, pos));
+ CHECK_ERR(makeArrayInitData(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 'e':
if (op == "array.init_elem"sv) {
- CHECK_ERR(makeArrayInitElem(ctx, pos));
+ CHECK_ERR(makeArrayInitElem(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -3689,7 +3689,7 @@ switch (buf[0]) {
}
case 'l':
if (op == "array.len"sv) {
- CHECK_ERR(makeArrayLen(ctx, pos));
+ CHECK_ERR(makeArrayLen(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -3697,7 +3697,7 @@ switch (buf[0]) {
switch (buf[9]) {
case '\0':
if (op == "array.new"sv) {
- CHECK_ERR(makeArrayNew(ctx, pos, false));
+ CHECK_ERR(makeArrayNew(ctx, pos, annotations, false));
return Ok{};
}
goto parse_error;
@@ -3707,13 +3707,13 @@ switch (buf[0]) {
switch (buf[11]) {
case 'a':
if (op == "array.new_data"sv) {
- CHECK_ERR(makeArrayNewData(ctx, pos));
+ CHECK_ERR(makeArrayNewData(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 'e':
if (op == "array.new_default"sv) {
- CHECK_ERR(makeArrayNew(ctx, pos, true));
+ CHECK_ERR(makeArrayNew(ctx, pos, annotations, true));
return Ok{};
}
goto parse_error;
@@ -3722,13 +3722,13 @@ switch (buf[0]) {
}
case 'e':
if (op == "array.new_elem"sv) {
- CHECK_ERR(makeArrayNewElem(ctx, pos));
+ CHECK_ERR(makeArrayNewElem(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 'f':
if (op == "array.new_fixed"sv) {
- CHECK_ERR(makeArrayNewFixed(ctx, pos));
+ CHECK_ERR(makeArrayNewFixed(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -3740,7 +3740,7 @@ switch (buf[0]) {
}
case 's':
if (op == "array.set"sv) {
- CHECK_ERR(makeArraySet(ctx, pos));
+ CHECK_ERR(makeArraySet(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -3749,7 +3749,7 @@ switch (buf[0]) {
}
case 't':
if (op == "atomic.fence"sv) {
- CHECK_ERR(makeAtomicFence(ctx, pos));
+ CHECK_ERR(makeAtomicFence(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -3760,7 +3760,7 @@ switch (buf[0]) {
switch (buf[2]) {
case '\0':
if (op == "br"sv) {
- CHECK_ERR(makeBreak(ctx, pos, false));
+ CHECK_ERR(makeBreak(ctx, pos, annotations, false));
return Ok{};
}
goto parse_error;
@@ -3768,7 +3768,7 @@ switch (buf[0]) {
switch (buf[3]) {
case 'i':
if (op == "br_if"sv) {
- CHECK_ERR(makeBreak(ctx, pos, true));
+ CHECK_ERR(makeBreak(ctx, pos, annotations, true));
return Ok{};
}
goto parse_error;
@@ -3778,13 +3778,13 @@ switch (buf[0]) {
switch (buf[10]) {
case '\0':
if (op == "br_on_cast"sv) {
- CHECK_ERR(makeBrOnCast(ctx, pos));
+ CHECK_ERR(makeBrOnCast(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case '_':
if (op == "br_on_cast_fail"sv) {
- CHECK_ERR(makeBrOnCast(ctx, pos, true));
+ CHECK_ERR(makeBrOnCast(ctx, pos, annotations, true));
return Ok{};
}
goto parse_error;
@@ -3795,13 +3795,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 'o':
if (op == "br_on_non_null"sv) {
- CHECK_ERR(makeBrOnNull(ctx, pos, true));
+ CHECK_ERR(makeBrOnNull(ctx, pos, annotations, true));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "br_on_null"sv) {
- CHECK_ERR(makeBrOnNull(ctx, pos));
+ CHECK_ERR(makeBrOnNull(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -3813,7 +3813,7 @@ switch (buf[0]) {
}
case 't':
if (op == "br_table"sv) {
- CHECK_ERR(makeBreakTable(ctx, pos));
+ CHECK_ERR(makeBreakTable(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -3829,7 +3829,7 @@ switch (buf[0]) {
switch (buf[4]) {
case '\0':
if (op == "call"sv) {
- CHECK_ERR(makeCall(ctx, pos, /*isReturn=*/false));
+ CHECK_ERR(makeCall(ctx, pos, annotations, /*isReturn=*/false));
return Ok{};
}
goto parse_error;
@@ -3837,13 +3837,13 @@ switch (buf[0]) {
switch (buf[5]) {
case 'i':
if (op == "call_indirect"sv) {
- CHECK_ERR(makeCallIndirect(ctx, pos, /*isReturn=*/false));
+ CHECK_ERR(makeCallIndirect(ctx, pos, annotations, /*isReturn=*/false));
return Ok{};
}
goto parse_error;
case 'r':
if (op == "call_ref"sv) {
- CHECK_ERR(makeCallRef(ctx, pos, /*isReturn=*/false));
+ CHECK_ERR(makeCallRef(ctx, pos, annotations, /*isReturn=*/false));
return Ok{};
}
goto parse_error;
@@ -3855,7 +3855,7 @@ switch (buf[0]) {
}
case 'o':
if (op == "cont.new"sv) {
- CHECK_ERR(makeContNew(ctx, pos));
+ CHECK_ERR(makeContNew(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -3866,13 +3866,13 @@ switch (buf[0]) {
switch (buf[1]) {
case 'a':
if (op == "data.drop"sv) {
- CHECK_ERR(makeDataDrop(ctx, pos));
+ CHECK_ERR(makeDataDrop(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 'r':
if (op == "drop"sv) {
- CHECK_ERR(makeDrop(ctx, pos));
+ CHECK_ERR(makeDrop(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -3883,13 +3883,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 'e':
if (op == "extern.externalize"sv) {
- CHECK_ERR(makeRefAs(ctx, pos, ExternExternalize));
+ CHECK_ERR(makeRefAs(ctx, pos, annotations, ExternExternalize));
return Ok{};
}
goto parse_error;
case 'i':
if (op == "extern.internalize"sv) {
- CHECK_ERR(makeRefAs(ctx, pos, ExternInternalize));
+ CHECK_ERR(makeRefAs(ctx, pos, annotations, ExternInternalize));
return Ok{};
}
goto parse_error;
@@ -3906,13 +3906,13 @@ switch (buf[0]) {
switch (buf[5]) {
case 'b':
if (op == "f32.abs"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::AbsFloat32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::AbsFloat32));
return Ok{};
}
goto parse_error;
case 'd':
if (op == "f32.add"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AddFloat32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AddFloat32));
return Ok{};
}
goto parse_error;
@@ -3923,7 +3923,7 @@ switch (buf[0]) {
switch (buf[5]) {
case 'e':
if (op == "f32.ceil"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::CeilFloat32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::CeilFloat32));
return Ok{};
}
goto parse_error;
@@ -3933,7 +3933,7 @@ switch (buf[0]) {
switch (buf[7]) {
case 's':
if (op == "f32.const"sv) {
- CHECK_ERR(makeConst(ctx, pos, Type::f32));
+ CHECK_ERR(makeConst(ctx, pos, annotations, Type::f32));
return Ok{};
}
goto parse_error;
@@ -3943,13 +3943,13 @@ switch (buf[0]) {
switch (buf[16]) {
case 's':
if (op == "f32.convert_i32_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ConvertSInt32ToFloat32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ConvertSInt32ToFloat32));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "f32.convert_i32_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ConvertUInt32ToFloat32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ConvertUInt32ToFloat32));
return Ok{};
}
goto parse_error;
@@ -3960,13 +3960,13 @@ switch (buf[0]) {
switch (buf[16]) {
case 's':
if (op == "f32.convert_i64_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ConvertSInt64ToFloat32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ConvertSInt64ToFloat32));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "f32.convert_i64_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ConvertUInt64ToFloat32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ConvertUInt64ToFloat32));
return Ok{};
}
goto parse_error;
@@ -3981,7 +3981,7 @@ switch (buf[0]) {
}
case 'p':
if (op == "f32.copysign"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::CopySignFloat32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::CopySignFloat32));
return Ok{};
}
goto parse_error;
@@ -3995,13 +3995,13 @@ switch (buf[0]) {
switch (buf[5]) {
case 'e':
if (op == "f32.demote_f64"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::DemoteFloat64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::DemoteFloat64));
return Ok{};
}
goto parse_error;
case 'i':
if (op == "f32.div"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::DivFloat32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::DivFloat32));
return Ok{};
}
goto parse_error;
@@ -4010,13 +4010,13 @@ switch (buf[0]) {
}
case 'e':
if (op == "f32.eq"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::EqFloat32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::EqFloat32));
return Ok{};
}
goto parse_error;
case 'f':
if (op == "f32.floor"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::FloorFloat32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::FloorFloat32));
return Ok{};
}
goto parse_error;
@@ -4024,13 +4024,13 @@ switch (buf[0]) {
switch (buf[5]) {
case 'e':
if (op == "f32.ge"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GeFloat32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeFloat32));
return Ok{};
}
goto parse_error;
case 't':
if (op == "f32.gt"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GtFloat32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GtFloat32));
return Ok{};
}
goto parse_error;
@@ -4041,19 +4041,19 @@ switch (buf[0]) {
switch (buf[5]) {
case 'e':
if (op == "f32.le"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LeFloat32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LeFloat32));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "f32.load"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::f32, /*signed=*/false, 4, /*isAtomic=*/false));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::f32, /*signed=*/false, 4, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
case 't':
if (op == "f32.lt"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LtFloat32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LtFloat32));
return Ok{};
}
goto parse_error;
@@ -4064,19 +4064,19 @@ switch (buf[0]) {
switch (buf[5]) {
case 'a':
if (op == "f32.max"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MaxFloat32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MaxFloat32));
return Ok{};
}
goto parse_error;
case 'i':
if (op == "f32.min"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MinFloat32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MinFloat32));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "f32.mul"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MulFloat32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MulFloat32));
return Ok{};
}
goto parse_error;
@@ -4087,19 +4087,19 @@ switch (buf[0]) {
switch (buf[6]) {
case '\0':
if (op == "f32.ne"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::NeFloat32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::NeFloat32));
return Ok{};
}
goto parse_error;
case 'a':
if (op == "f32.nearest"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::NearestFloat32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NearestFloat32));
return Ok{};
}
goto parse_error;
case 'g':
if (op == "f32.neg"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::NegFloat32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NegFloat32));
return Ok{};
}
goto parse_error;
@@ -4108,7 +4108,7 @@ switch (buf[0]) {
}
case 'r':
if (op == "f32.reinterpret_i32"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ReinterpretInt32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ReinterpretInt32));
return Ok{};
}
goto parse_error;
@@ -4116,19 +4116,19 @@ switch (buf[0]) {
switch (buf[5]) {
case 'q':
if (op == "f32.sqrt"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::SqrtFloat32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::SqrtFloat32));
return Ok{};
}
goto parse_error;
case 't':
if (op == "f32.store"sv) {
- CHECK_ERR(makeStore(ctx, pos, Type::f32, 4, /*isAtomic=*/false));
+ CHECK_ERR(makeStore(ctx, pos, annotations, Type::f32, 4, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "f32.sub"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::SubFloat32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubFloat32));
return Ok{};
}
goto parse_error;
@@ -4137,7 +4137,7 @@ switch (buf[0]) {
}
case 't':
if (op == "f32.trunc"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncFloat32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncFloat32));
return Ok{};
}
goto parse_error;
@@ -4150,13 +4150,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 'b':
if (op == "f32x4.abs"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::AbsVecF32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::AbsVecF32x4));
return Ok{};
}
goto parse_error;
case 'd':
if (op == "f32x4.add"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AddVecF32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AddVecF32x4));
return Ok{};
}
goto parse_error;
@@ -4167,7 +4167,7 @@ switch (buf[0]) {
switch (buf[7]) {
case 'e':
if (op == "f32x4.ceil"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::CeilVecF32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::CeilVecF32x4));
return Ok{};
}
goto parse_error;
@@ -4175,13 +4175,13 @@ switch (buf[0]) {
switch (buf[20]) {
case 's':
if (op == "f32x4.convert_i32x4_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ConvertSVecI32x4ToVecF32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ConvertSVecI32x4ToVecF32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "f32x4.convert_i32x4_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ConvertUVecI32x4ToVecF32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ConvertUVecI32x4ToVecF32x4));
return Ok{};
}
goto parse_error;
@@ -4195,13 +4195,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 'e':
if (op == "f32x4.demote_f64x2_zero"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::DemoteZeroVecF64x2ToVecF32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::DemoteZeroVecF64x2ToVecF32x4));
return Ok{};
}
goto parse_error;
case 'i':
if (op == "f32x4.div"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::DivVecF32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::DivVecF32x4));
return Ok{};
}
goto parse_error;
@@ -4212,13 +4212,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 'q':
if (op == "f32x4.eq"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::EqVecF32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::EqVecF32x4));
return Ok{};
}
goto parse_error;
case 'x':
if (op == "f32x4.extract_lane"sv) {
- CHECK_ERR(makeSIMDExtract(ctx, pos, SIMDExtractOp::ExtractLaneVecF32x4, 4));
+ CHECK_ERR(makeSIMDExtract(ctx, pos, annotations, SIMDExtractOp::ExtractLaneVecF32x4, 4));
return Ok{};
}
goto parse_error;
@@ -4227,7 +4227,7 @@ switch (buf[0]) {
}
case 'f':
if (op == "f32x4.floor"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::FloorVecF32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::FloorVecF32x4));
return Ok{};
}
goto parse_error;
@@ -4235,13 +4235,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 'e':
if (op == "f32x4.ge"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GeVecF32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeVecF32x4));
return Ok{};
}
goto parse_error;
case 't':
if (op == "f32x4.gt"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GtVecF32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GtVecF32x4));
return Ok{};
}
goto parse_error;
@@ -4252,13 +4252,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 'e':
if (op == "f32x4.le"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LeVecF32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LeVecF32x4));
return Ok{};
}
goto parse_error;
case 't':
if (op == "f32x4.lt"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LtVecF32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LtVecF32x4));
return Ok{};
}
goto parse_error;
@@ -4269,19 +4269,19 @@ switch (buf[0]) {
switch (buf[7]) {
case 'a':
if (op == "f32x4.max"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MaxVecF32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MaxVecF32x4));
return Ok{};
}
goto parse_error;
case 'i':
if (op == "f32x4.min"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MinVecF32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MinVecF32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "f32x4.mul"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MulVecF32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MulVecF32x4));
return Ok{};
}
goto parse_error;
@@ -4292,19 +4292,19 @@ switch (buf[0]) {
switch (buf[8]) {
case '\0':
if (op == "f32x4.ne"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::NeVecF32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::NeVecF32x4));
return Ok{};
}
goto parse_error;
case 'a':
if (op == "f32x4.nearest"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::NearestVecF32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NearestVecF32x4));
return Ok{};
}
goto parse_error;
case 'g':
if (op == "f32x4.neg"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::NegVecF32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NegVecF32x4));
return Ok{};
}
goto parse_error;
@@ -4315,13 +4315,13 @@ switch (buf[0]) {
switch (buf[8]) {
case 'a':
if (op == "f32x4.pmax"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::PMaxVecF32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::PMaxVecF32x4));
return Ok{};
}
goto parse_error;
case 'i':
if (op == "f32x4.pmin"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::PMinVecF32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::PMinVecF32x4));
return Ok{};
}
goto parse_error;
@@ -4336,13 +4336,13 @@ switch (buf[0]) {
switch (buf[16]) {
case 'a':
if (op == "f32x4.relaxed_fma"sv) {
- CHECK_ERR(makeSIMDTernary(ctx, pos, SIMDTernaryOp::RelaxedFmaVecF32x4));
+ CHECK_ERR(makeSIMDTernary(ctx, pos, annotations, SIMDTernaryOp::RelaxedFmaVecF32x4));
return Ok{};
}
goto parse_error;
case 's':
if (op == "f32x4.relaxed_fms"sv) {
- CHECK_ERR(makeSIMDTernary(ctx, pos, SIMDTernaryOp::RelaxedFmsVecF32x4));
+ CHECK_ERR(makeSIMDTernary(ctx, pos, annotations, SIMDTernaryOp::RelaxedFmsVecF32x4));
return Ok{};
}
goto parse_error;
@@ -4353,13 +4353,13 @@ switch (buf[0]) {
switch (buf[15]) {
case 'a':
if (op == "f32x4.relaxed_max"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::RelaxedMaxVecF32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::RelaxedMaxVecF32x4));
return Ok{};
}
goto parse_error;
case 'i':
if (op == "f32x4.relaxed_min"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::RelaxedMinVecF32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::RelaxedMinVecF32x4));
return Ok{};
}
goto parse_error;
@@ -4371,7 +4371,7 @@ switch (buf[0]) {
}
case 'p':
if (op == "f32x4.replace_lane"sv) {
- CHECK_ERR(makeSIMDReplace(ctx, pos, SIMDReplaceOp::ReplaceLaneVecF32x4, 4));
+ CHECK_ERR(makeSIMDReplace(ctx, pos, annotations, SIMDReplaceOp::ReplaceLaneVecF32x4, 4));
return Ok{};
}
goto parse_error;
@@ -4382,19 +4382,19 @@ switch (buf[0]) {
switch (buf[7]) {
case 'p':
if (op == "f32x4.splat"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::SplatVecF32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::SplatVecF32x4));
return Ok{};
}
goto parse_error;
case 'q':
if (op == "f32x4.sqrt"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::SqrtVecF32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::SqrtVecF32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "f32x4.sub"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::SubVecF32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubVecF32x4));
return Ok{};
}
goto parse_error;
@@ -4403,7 +4403,7 @@ switch (buf[0]) {
}
case 't':
if (op == "f32x4.trunc"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncVecF32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncVecF32x4));
return Ok{};
}
goto parse_error;
@@ -4421,13 +4421,13 @@ switch (buf[0]) {
switch (buf[5]) {
case 'b':
if (op == "f64.abs"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::AbsFloat64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::AbsFloat64));
return Ok{};
}
goto parse_error;
case 'd':
if (op == "f64.add"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AddFloat64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AddFloat64));
return Ok{};
}
goto parse_error;
@@ -4438,7 +4438,7 @@ switch (buf[0]) {
switch (buf[5]) {
case 'e':
if (op == "f64.ceil"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::CeilFloat64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::CeilFloat64));
return Ok{};
}
goto parse_error;
@@ -4448,7 +4448,7 @@ switch (buf[0]) {
switch (buf[7]) {
case 's':
if (op == "f64.const"sv) {
- CHECK_ERR(makeConst(ctx, pos, Type::f64));
+ CHECK_ERR(makeConst(ctx, pos, annotations, Type::f64));
return Ok{};
}
goto parse_error;
@@ -4458,13 +4458,13 @@ switch (buf[0]) {
switch (buf[16]) {
case 's':
if (op == "f64.convert_i32_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ConvertSInt32ToFloat64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ConvertSInt32ToFloat64));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "f64.convert_i32_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ConvertUInt32ToFloat64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ConvertUInt32ToFloat64));
return Ok{};
}
goto parse_error;
@@ -4475,13 +4475,13 @@ switch (buf[0]) {
switch (buf[16]) {
case 's':
if (op == "f64.convert_i64_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ConvertSInt64ToFloat64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ConvertSInt64ToFloat64));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "f64.convert_i64_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ConvertUInt64ToFloat64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ConvertUInt64ToFloat64));
return Ok{};
}
goto parse_error;
@@ -4496,7 +4496,7 @@ switch (buf[0]) {
}
case 'p':
if (op == "f64.copysign"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::CopySignFloat64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::CopySignFloat64));
return Ok{};
}
goto parse_error;
@@ -4508,19 +4508,19 @@ switch (buf[0]) {
}
case 'd':
if (op == "f64.div"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::DivFloat64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::DivFloat64));
return Ok{};
}
goto parse_error;
case 'e':
if (op == "f64.eq"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::EqFloat64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::EqFloat64));
return Ok{};
}
goto parse_error;
case 'f':
if (op == "f64.floor"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::FloorFloat64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::FloorFloat64));
return Ok{};
}
goto parse_error;
@@ -4528,13 +4528,13 @@ switch (buf[0]) {
switch (buf[5]) {
case 'e':
if (op == "f64.ge"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GeFloat64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeFloat64));
return Ok{};
}
goto parse_error;
case 't':
if (op == "f64.gt"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GtFloat64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GtFloat64));
return Ok{};
}
goto parse_error;
@@ -4545,19 +4545,19 @@ switch (buf[0]) {
switch (buf[5]) {
case 'e':
if (op == "f64.le"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LeFloat64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LeFloat64));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "f64.load"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::f64, /*signed=*/false, 8, /*isAtomic=*/false));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::f64, /*signed=*/false, 8, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
case 't':
if (op == "f64.lt"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LtFloat64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LtFloat64));
return Ok{};
}
goto parse_error;
@@ -4568,19 +4568,19 @@ switch (buf[0]) {
switch (buf[5]) {
case 'a':
if (op == "f64.max"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MaxFloat64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MaxFloat64));
return Ok{};
}
goto parse_error;
case 'i':
if (op == "f64.min"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MinFloat64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MinFloat64));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "f64.mul"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MulFloat64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MulFloat64));
return Ok{};
}
goto parse_error;
@@ -4591,19 +4591,19 @@ switch (buf[0]) {
switch (buf[6]) {
case '\0':
if (op == "f64.ne"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::NeFloat64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::NeFloat64));
return Ok{};
}
goto parse_error;
case 'a':
if (op == "f64.nearest"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::NearestFloat64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NearestFloat64));
return Ok{};
}
goto parse_error;
case 'g':
if (op == "f64.neg"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::NegFloat64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NegFloat64));
return Ok{};
}
goto parse_error;
@@ -4612,13 +4612,13 @@ switch (buf[0]) {
}
case 'p':
if (op == "f64.promote_f32"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::PromoteFloat32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::PromoteFloat32));
return Ok{};
}
goto parse_error;
case 'r':
if (op == "f64.reinterpret_i64"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ReinterpretInt64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ReinterpretInt64));
return Ok{};
}
goto parse_error;
@@ -4626,19 +4626,19 @@ switch (buf[0]) {
switch (buf[5]) {
case 'q':
if (op == "f64.sqrt"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::SqrtFloat64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::SqrtFloat64));
return Ok{};
}
goto parse_error;
case 't':
if (op == "f64.store"sv) {
- CHECK_ERR(makeStore(ctx, pos, Type::f64, 8, /*isAtomic=*/false));
+ CHECK_ERR(makeStore(ctx, pos, annotations, Type::f64, 8, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "f64.sub"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::SubFloat64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubFloat64));
return Ok{};
}
goto parse_error;
@@ -4647,7 +4647,7 @@ switch (buf[0]) {
}
case 't':
if (op == "f64.trunc"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncFloat64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncFloat64));
return Ok{};
}
goto parse_error;
@@ -4660,13 +4660,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 'b':
if (op == "f64x2.abs"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::AbsVecF64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::AbsVecF64x2));
return Ok{};
}
goto parse_error;
case 'd':
if (op == "f64x2.add"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AddVecF64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AddVecF64x2));
return Ok{};
}
goto parse_error;
@@ -4677,7 +4677,7 @@ switch (buf[0]) {
switch (buf[7]) {
case 'e':
if (op == "f64x2.ceil"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::CeilVecF64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::CeilVecF64x2));
return Ok{};
}
goto parse_error;
@@ -4685,13 +4685,13 @@ switch (buf[0]) {
switch (buf[24]) {
case 's':
if (op == "f64x2.convert_low_i32x4_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ConvertLowSVecI32x4ToVecF64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ConvertLowSVecI32x4ToVecF64x2));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "f64x2.convert_low_i32x4_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ConvertLowUVecI32x4ToVecF64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ConvertLowUVecI32x4ToVecF64x2));
return Ok{};
}
goto parse_error;
@@ -4703,7 +4703,7 @@ switch (buf[0]) {
}
case 'd':
if (op == "f64x2.div"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::DivVecF64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::DivVecF64x2));
return Ok{};
}
goto parse_error;
@@ -4711,13 +4711,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 'q':
if (op == "f64x2.eq"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::EqVecF64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::EqVecF64x2));
return Ok{};
}
goto parse_error;
case 'x':
if (op == "f64x2.extract_lane"sv) {
- CHECK_ERR(makeSIMDExtract(ctx, pos, SIMDExtractOp::ExtractLaneVecF64x2, 2));
+ CHECK_ERR(makeSIMDExtract(ctx, pos, annotations, SIMDExtractOp::ExtractLaneVecF64x2, 2));
return Ok{};
}
goto parse_error;
@@ -4726,7 +4726,7 @@ switch (buf[0]) {
}
case 'f':
if (op == "f64x2.floor"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::FloorVecF64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::FloorVecF64x2));
return Ok{};
}
goto parse_error;
@@ -4734,13 +4734,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 'e':
if (op == "f64x2.ge"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GeVecF64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeVecF64x2));
return Ok{};
}
goto parse_error;
case 't':
if (op == "f64x2.gt"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GtVecF64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GtVecF64x2));
return Ok{};
}
goto parse_error;
@@ -4751,13 +4751,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 'e':
if (op == "f64x2.le"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LeVecF64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LeVecF64x2));
return Ok{};
}
goto parse_error;
case 't':
if (op == "f64x2.lt"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LtVecF64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LtVecF64x2));
return Ok{};
}
goto parse_error;
@@ -4768,19 +4768,19 @@ switch (buf[0]) {
switch (buf[7]) {
case 'a':
if (op == "f64x2.max"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MaxVecF64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MaxVecF64x2));
return Ok{};
}
goto parse_error;
case 'i':
if (op == "f64x2.min"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MinVecF64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MinVecF64x2));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "f64x2.mul"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MulVecF64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MulVecF64x2));
return Ok{};
}
goto parse_error;
@@ -4791,19 +4791,19 @@ switch (buf[0]) {
switch (buf[8]) {
case '\0':
if (op == "f64x2.ne"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::NeVecF64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::NeVecF64x2));
return Ok{};
}
goto parse_error;
case 'a':
if (op == "f64x2.nearest"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::NearestVecF64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NearestVecF64x2));
return Ok{};
}
goto parse_error;
case 'g':
if (op == "f64x2.neg"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::NegVecF64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NegVecF64x2));
return Ok{};
}
goto parse_error;
@@ -4816,13 +4816,13 @@ switch (buf[0]) {
switch (buf[8]) {
case 'a':
if (op == "f64x2.pmax"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::PMaxVecF64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::PMaxVecF64x2));
return Ok{};
}
goto parse_error;
case 'i':
if (op == "f64x2.pmin"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::PMinVecF64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::PMinVecF64x2));
return Ok{};
}
goto parse_error;
@@ -4831,7 +4831,7 @@ switch (buf[0]) {
}
case 'r':
if (op == "f64x2.promote_low_f32x4"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::PromoteLowVecF32x4ToVecF64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::PromoteLowVecF32x4ToVecF64x2));
return Ok{};
}
goto parse_error;
@@ -4846,13 +4846,13 @@ switch (buf[0]) {
switch (buf[16]) {
case 'a':
if (op == "f64x2.relaxed_fma"sv) {
- CHECK_ERR(makeSIMDTernary(ctx, pos, SIMDTernaryOp::RelaxedFmaVecF64x2));
+ CHECK_ERR(makeSIMDTernary(ctx, pos, annotations, SIMDTernaryOp::RelaxedFmaVecF64x2));
return Ok{};
}
goto parse_error;
case 's':
if (op == "f64x2.relaxed_fms"sv) {
- CHECK_ERR(makeSIMDTernary(ctx, pos, SIMDTernaryOp::RelaxedFmsVecF64x2));
+ CHECK_ERR(makeSIMDTernary(ctx, pos, annotations, SIMDTernaryOp::RelaxedFmsVecF64x2));
return Ok{};
}
goto parse_error;
@@ -4863,13 +4863,13 @@ switch (buf[0]) {
switch (buf[15]) {
case 'a':
if (op == "f64x2.relaxed_max"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::RelaxedMaxVecF64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::RelaxedMaxVecF64x2));
return Ok{};
}
goto parse_error;
case 'i':
if (op == "f64x2.relaxed_min"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::RelaxedMinVecF64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::RelaxedMinVecF64x2));
return Ok{};
}
goto parse_error;
@@ -4881,7 +4881,7 @@ switch (buf[0]) {
}
case 'p':
if (op == "f64x2.replace_lane"sv) {
- CHECK_ERR(makeSIMDReplace(ctx, pos, SIMDReplaceOp::ReplaceLaneVecF64x2, 2));
+ CHECK_ERR(makeSIMDReplace(ctx, pos, annotations, SIMDReplaceOp::ReplaceLaneVecF64x2, 2));
return Ok{};
}
goto parse_error;
@@ -4892,19 +4892,19 @@ switch (buf[0]) {
switch (buf[7]) {
case 'p':
if (op == "f64x2.splat"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::SplatVecF64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::SplatVecF64x2));
return Ok{};
}
goto parse_error;
case 'q':
if (op == "f64x2.sqrt"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::SqrtVecF64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::SqrtVecF64x2));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "f64x2.sub"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::SubVecF64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubVecF64x2));
return Ok{};
}
goto parse_error;
@@ -4913,7 +4913,7 @@ switch (buf[0]) {
}
case 't':
if (op == "f64x2.trunc"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncVecF64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncVecF64x2));
return Ok{};
}
goto parse_error;
@@ -4930,13 +4930,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 'g':
if (op == "global.get"sv) {
- CHECK_ERR(makeGlobalGet(ctx, pos));
+ CHECK_ERR(makeGlobalGet(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 's':
if (op == "global.set"sv) {
- CHECK_ERR(makeGlobalSet(ctx, pos));
+ CHECK_ERR(makeGlobalSet(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -4951,7 +4951,7 @@ switch (buf[0]) {
switch (buf[7]) {
case 'b':
if (op == "i16x8.abs"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::AbsVecI16x8));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::AbsVecI16x8));
return Ok{};
}
goto parse_error;
@@ -4959,7 +4959,7 @@ switch (buf[0]) {
switch (buf[9]) {
case '\0':
if (op == "i16x8.add"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AddVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AddVecI16x8));
return Ok{};
}
goto parse_error;
@@ -4967,13 +4967,13 @@ switch (buf[0]) {
switch (buf[14]) {
case 's':
if (op == "i16x8.add_sat_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AddSatSVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AddSatSVecI16x8));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i16x8.add_sat_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AddSatUVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AddSatUVecI16x8));
return Ok{};
}
goto parse_error;
@@ -4985,13 +4985,13 @@ switch (buf[0]) {
}
case 'l':
if (op == "i16x8.all_true"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::AllTrueVecI16x8));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::AllTrueVecI16x8));
return Ok{};
}
goto parse_error;
case 'v':
if (op == "i16x8.avgr_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AvgrUVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AvgrUVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5000,13 +5000,13 @@ switch (buf[0]) {
}
case 'b':
if (op == "i16x8.bitmask"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::BitmaskVecI16x8));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::BitmaskVecI16x8));
return Ok{};
}
goto parse_error;
case 'd':
if (op == "i16x8.dot_i8x16_i7x16_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::DotI8x16I7x16SToVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::DotI8x16I7x16SToVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5014,7 +5014,7 @@ switch (buf[0]) {
switch (buf[7]) {
case 'q':
if (op == "i16x8.eq"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::EqVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::EqVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5024,13 +5024,13 @@ switch (buf[0]) {
switch (buf[28]) {
case 's':
if (op == "i16x8.extadd_pairwise_i8x16_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtAddPairwiseSVecI8x16ToI16x8));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtAddPairwiseSVecI8x16ToI16x8));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i16x8.extadd_pairwise_i8x16_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtAddPairwiseUVecI8x16ToI16x8));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtAddPairwiseUVecI8x16ToI16x8));
return Ok{};
}
goto parse_error;
@@ -5043,13 +5043,13 @@ switch (buf[0]) {
switch (buf[24]) {
case 's':
if (op == "i16x8.extend_high_i8x16_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtendHighSVecI8x16ToVecI16x8));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendHighSVecI8x16ToVecI16x8));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i16x8.extend_high_i8x16_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtendHighUVecI8x16ToVecI16x8));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendHighUVecI8x16ToVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5060,13 +5060,13 @@ switch (buf[0]) {
switch (buf[23]) {
case 's':
if (op == "i16x8.extend_low_i8x16_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtendLowSVecI8x16ToVecI16x8));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendLowSVecI8x16ToVecI16x8));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i16x8.extend_low_i8x16_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtendLowUVecI8x16ToVecI16x8));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendLowUVecI8x16ToVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5082,13 +5082,13 @@ switch (buf[0]) {
switch (buf[24]) {
case 's':
if (op == "i16x8.extmul_high_i8x16_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::ExtMulHighSVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::ExtMulHighSVecI16x8));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i16x8.extmul_high_i8x16_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::ExtMulHighUVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::ExtMulHighUVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5099,13 +5099,13 @@ switch (buf[0]) {
switch (buf[23]) {
case 's':
if (op == "i16x8.extmul_low_i8x16_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::ExtMulLowSVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::ExtMulLowSVecI16x8));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i16x8.extmul_low_i8x16_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::ExtMulLowUVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::ExtMulLowUVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5119,13 +5119,13 @@ switch (buf[0]) {
switch (buf[19]) {
case 's':
if (op == "i16x8.extract_lane_s"sv) {
- CHECK_ERR(makeSIMDExtract(ctx, pos, SIMDExtractOp::ExtractLaneSVecI16x8, 8));
+ CHECK_ERR(makeSIMDExtract(ctx, pos, annotations, SIMDExtractOp::ExtractLaneSVecI16x8, 8));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i16x8.extract_lane_u"sv) {
- CHECK_ERR(makeSIMDExtract(ctx, pos, SIMDExtractOp::ExtractLaneUVecI16x8, 8));
+ CHECK_ERR(makeSIMDExtract(ctx, pos, annotations, SIMDExtractOp::ExtractLaneUVecI16x8, 8));
return Ok{};
}
goto parse_error;
@@ -5144,13 +5144,13 @@ switch (buf[0]) {
switch (buf[9]) {
case 's':
if (op == "i16x8.ge_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GeSVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeSVecI16x8));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i16x8.ge_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GeUVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeUVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5161,13 +5161,13 @@ switch (buf[0]) {
switch (buf[9]) {
case 's':
if (op == "i16x8.gt_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GtSVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GtSVecI16x8));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i16x8.gt_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GtUVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GtUVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5181,7 +5181,7 @@ switch (buf[0]) {
switch (buf[7]) {
case 'a':
if (op == "i16x8.laneselect"sv) {
- CHECK_ERR(makeSIMDTernary(ctx, pos, SIMDTernaryOp::LaneselectI16x8));
+ CHECK_ERR(makeSIMDTernary(ctx, pos, annotations, SIMDTernaryOp::LaneselectI16x8));
return Ok{};
}
goto parse_error;
@@ -5189,13 +5189,13 @@ switch (buf[0]) {
switch (buf[9]) {
case 's':
if (op == "i16x8.le_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LeSVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LeSVecI16x8));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i16x8.le_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LeUVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LeUVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5206,13 +5206,13 @@ switch (buf[0]) {
switch (buf[9]) {
case 's':
if (op == "i16x8.lt_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LtSVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LtSVecI16x8));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i16x8.lt_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LtUVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LtUVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5228,13 +5228,13 @@ switch (buf[0]) {
switch (buf[10]) {
case 's':
if (op == "i16x8.max_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MaxSVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MaxSVecI16x8));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i16x8.max_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MaxUVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MaxUVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5245,13 +5245,13 @@ switch (buf[0]) {
switch (buf[10]) {
case 's':
if (op == "i16x8.min_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MinSVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MinSVecI16x8));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i16x8.min_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MinUVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MinUVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5260,7 +5260,7 @@ switch (buf[0]) {
}
case 'u':
if (op == "i16x8.mul"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MulVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MulVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5273,13 +5273,13 @@ switch (buf[0]) {
switch (buf[19]) {
case 's':
if (op == "i16x8.narrow_i32x4_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::NarrowSVecI32x4ToVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::NarrowSVecI32x4ToVecI16x8));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i16x8.narrow_i32x4_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::NarrowUVecI32x4ToVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::NarrowUVecI32x4ToVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5290,13 +5290,13 @@ switch (buf[0]) {
switch (buf[8]) {
case '\0':
if (op == "i16x8.ne"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::NeVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::NeVecI16x8));
return Ok{};
}
goto parse_error;
case 'g':
if (op == "i16x8.neg"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::NegVecI16x8));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NegVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5308,7 +5308,7 @@ switch (buf[0]) {
}
case 'q':
if (op == "i16x8.q15mulr_sat_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::Q15MulrSatSVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::Q15MulrSatSVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5316,13 +5316,13 @@ switch (buf[0]) {
switch (buf[8]) {
case 'l':
if (op == "i16x8.relaxed_q15mulr_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::RelaxedQ15MulrSVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::RelaxedQ15MulrSVecI16x8));
return Ok{};
}
goto parse_error;
case 'p':
if (op == "i16x8.replace_lane"sv) {
- CHECK_ERR(makeSIMDReplace(ctx, pos, SIMDReplaceOp::ReplaceLaneVecI16x8, 8));
+ CHECK_ERR(makeSIMDReplace(ctx, pos, annotations, SIMDReplaceOp::ReplaceLaneVecI16x8, 8));
return Ok{};
}
goto parse_error;
@@ -5335,7 +5335,7 @@ switch (buf[0]) {
switch (buf[8]) {
case 'l':
if (op == "i16x8.shl"sv) {
- CHECK_ERR(makeSIMDShift(ctx, pos, SIMDShiftOp::ShlVecI16x8));
+ CHECK_ERR(makeSIMDShift(ctx, pos, annotations, SIMDShiftOp::ShlVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5343,13 +5343,13 @@ switch (buf[0]) {
switch (buf[10]) {
case 's':
if (op == "i16x8.shr_s"sv) {
- CHECK_ERR(makeSIMDShift(ctx, pos, SIMDShiftOp::ShrSVecI16x8));
+ CHECK_ERR(makeSIMDShift(ctx, pos, annotations, SIMDShiftOp::ShrSVecI16x8));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i16x8.shr_u"sv) {
- CHECK_ERR(makeSIMDShift(ctx, pos, SIMDShiftOp::ShrUVecI16x8));
+ CHECK_ERR(makeSIMDShift(ctx, pos, annotations, SIMDShiftOp::ShrUVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5361,7 +5361,7 @@ switch (buf[0]) {
}
case 'p':
if (op == "i16x8.splat"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::SplatVecI16x8));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::SplatVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5369,7 +5369,7 @@ switch (buf[0]) {
switch (buf[9]) {
case '\0':
if (op == "i16x8.sub"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::SubVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5377,13 +5377,13 @@ switch (buf[0]) {
switch (buf[14]) {
case 's':
if (op == "i16x8.sub_sat_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::SubSatSVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubSatSVecI16x8));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i16x8.sub_sat_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::SubSatUVecI16x8));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubSatUVecI16x8));
return Ok{};
}
goto parse_error;
@@ -5407,13 +5407,13 @@ switch (buf[0]) {
switch (buf[8]) {
case 's':
if (op == "i31.get_s"sv) {
- CHECK_ERR(makeI31Get(ctx, pos, true));
+ CHECK_ERR(makeI31Get(ctx, pos, annotations, true));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i31.get_u"sv) {
- CHECK_ERR(makeI31Get(ctx, pos, false));
+ CHECK_ERR(makeI31Get(ctx, pos, annotations, false));
return Ok{};
}
goto parse_error;
@@ -5422,7 +5422,7 @@ switch (buf[0]) {
}
case 'n':
if (op == "i31.new"sv) {
- CHECK_ERR(makeRefI31(ctx, pos));
+ CHECK_ERR(makeRefI31(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -5437,13 +5437,13 @@ switch (buf[0]) {
switch (buf[5]) {
case 'd':
if (op == "i32.add"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AddInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AddInt32));
return Ok{};
}
goto parse_error;
case 'n':
if (op == "i32.and"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AndInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AndInt32));
return Ok{};
}
goto parse_error;
@@ -5453,19 +5453,19 @@ switch (buf[0]) {
switch (buf[15]) {
case '\0':
if (op == "i32.atomic.load"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::i32, /*signed=*/false, 4, /*isAtomic=*/true));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::i32, /*signed=*/false, 4, /*isAtomic=*/true));
return Ok{};
}
goto parse_error;
case '1':
if (op == "i32.atomic.load16_u"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::i32, /*signed=*/false, 2, /*isAtomic=*/true));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::i32, /*signed=*/false, 2, /*isAtomic=*/true));
return Ok{};
}
goto parse_error;
case '8':
if (op == "i32.atomic.load8_u"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::i32, /*signed=*/false, 1, /*isAtomic=*/true));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::i32, /*signed=*/false, 1, /*isAtomic=*/true));
return Ok{};
}
goto parse_error;
@@ -5480,13 +5480,13 @@ switch (buf[0]) {
switch (buf[16]) {
case 'd':
if (op == "i32.atomic.rmw.add"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAdd, Type::i32, 4));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWAdd, Type::i32, 4));
return Ok{};
}
goto parse_error;
case 'n':
if (op == "i32.atomic.rmw.and"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAnd, Type::i32, 4));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWAnd, Type::i32, 4));
return Ok{};
}
goto parse_error;
@@ -5495,19 +5495,19 @@ switch (buf[0]) {
}
case 'c':
if (op == "i32.atomic.rmw.cmpxchg"sv) {
- CHECK_ERR(makeAtomicCmpxchg(ctx, pos, Type::i32, 4));
+ CHECK_ERR(makeAtomicCmpxchg(ctx, pos, annotations, Type::i32, 4));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "i32.atomic.rmw.or"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWOr, Type::i32, 4));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWOr, Type::i32, 4));
return Ok{};
}
goto parse_error;
case 's':
if (op == "i32.atomic.rmw.sub"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWSub, Type::i32, 4));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWSub, Type::i32, 4));
return Ok{};
}
goto parse_error;
@@ -5515,13 +5515,13 @@ switch (buf[0]) {
switch (buf[16]) {
case 'c':
if (op == "i32.atomic.rmw.xchg"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXchg, Type::i32, 4));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWXchg, Type::i32, 4));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "i32.atomic.rmw.xor"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXor, Type::i32, 4));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWXor, Type::i32, 4));
return Ok{};
}
goto parse_error;
@@ -5537,13 +5537,13 @@ switch (buf[0]) {
switch (buf[18]) {
case 'd':
if (op == "i32.atomic.rmw16.add_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAdd, Type::i32, 2));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWAdd, Type::i32, 2));
return Ok{};
}
goto parse_error;
case 'n':
if (op == "i32.atomic.rmw16.and_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAnd, Type::i32, 2));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWAnd, Type::i32, 2));
return Ok{};
}
goto parse_error;
@@ -5552,19 +5552,19 @@ switch (buf[0]) {
}
case 'c':
if (op == "i32.atomic.rmw16.cmpxchg_u"sv) {
- CHECK_ERR(makeAtomicCmpxchg(ctx, pos, Type::i32, 2));
+ CHECK_ERR(makeAtomicCmpxchg(ctx, pos, annotations, Type::i32, 2));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "i32.atomic.rmw16.or_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWOr, Type::i32, 2));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWOr, Type::i32, 2));
return Ok{};
}
goto parse_error;
case 's':
if (op == "i32.atomic.rmw16.sub_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWSub, Type::i32, 2));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWSub, Type::i32, 2));
return Ok{};
}
goto parse_error;
@@ -5572,13 +5572,13 @@ switch (buf[0]) {
switch (buf[18]) {
case 'c':
if (op == "i32.atomic.rmw16.xchg_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXchg, Type::i32, 2));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWXchg, Type::i32, 2));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "i32.atomic.rmw16.xor_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXor, Type::i32, 2));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWXor, Type::i32, 2));
return Ok{};
}
goto parse_error;
@@ -5594,13 +5594,13 @@ switch (buf[0]) {
switch (buf[17]) {
case 'd':
if (op == "i32.atomic.rmw8.add_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAdd, Type::i32, 1));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWAdd, Type::i32, 1));
return Ok{};
}
goto parse_error;
case 'n':
if (op == "i32.atomic.rmw8.and_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAnd, Type::i32, 1));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWAnd, Type::i32, 1));
return Ok{};
}
goto parse_error;
@@ -5609,19 +5609,19 @@ switch (buf[0]) {
}
case 'c':
if (op == "i32.atomic.rmw8.cmpxchg_u"sv) {
- CHECK_ERR(makeAtomicCmpxchg(ctx, pos, Type::i32, 1));
+ CHECK_ERR(makeAtomicCmpxchg(ctx, pos, annotations, Type::i32, 1));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "i32.atomic.rmw8.or_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWOr, Type::i32, 1));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWOr, Type::i32, 1));
return Ok{};
}
goto parse_error;
case 's':
if (op == "i32.atomic.rmw8.sub_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWSub, Type::i32, 1));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWSub, Type::i32, 1));
return Ok{};
}
goto parse_error;
@@ -5629,13 +5629,13 @@ switch (buf[0]) {
switch (buf[17]) {
case 'c':
if (op == "i32.atomic.rmw8.xchg_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXchg, Type::i32, 1));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWXchg, Type::i32, 1));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "i32.atomic.rmw8.xor_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXor, Type::i32, 1));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWXor, Type::i32, 1));
return Ok{};
}
goto parse_error;
@@ -5652,19 +5652,19 @@ switch (buf[0]) {
switch (buf[16]) {
case '\0':
if (op == "i32.atomic.store"sv) {
- CHECK_ERR(makeStore(ctx, pos, Type::i32, 4, /*isAtomic=*/true));
+ CHECK_ERR(makeStore(ctx, pos, annotations, Type::i32, 4, /*isAtomic=*/true));
return Ok{};
}
goto parse_error;
case '1':
if (op == "i32.atomic.store16"sv) {
- CHECK_ERR(makeStore(ctx, pos, Type::i32, 2, /*isAtomic=*/true));
+ CHECK_ERR(makeStore(ctx, pos, annotations, Type::i32, 2, /*isAtomic=*/true));
return Ok{};
}
goto parse_error;
case '8':
if (op == "i32.atomic.store8"sv) {
- CHECK_ERR(makeStore(ctx, pos, Type::i32, 1, /*isAtomic=*/true));
+ CHECK_ERR(makeStore(ctx, pos, annotations, Type::i32, 1, /*isAtomic=*/true));
return Ok{};
}
goto parse_error;
@@ -5681,19 +5681,19 @@ switch (buf[0]) {
switch (buf[5]) {
case 'l':
if (op == "i32.clz"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ClzInt32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ClzInt32));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "i32.const"sv) {
- CHECK_ERR(makeConst(ctx, pos, Type::i32));
+ CHECK_ERR(makeConst(ctx, pos, annotations, Type::i32));
return Ok{};
}
goto parse_error;
case 't':
if (op == "i32.ctz"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::CtzInt32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::CtzInt32));
return Ok{};
}
goto parse_error;
@@ -5704,13 +5704,13 @@ switch (buf[0]) {
switch (buf[8]) {
case 's':
if (op == "i32.div_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::DivSInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::DivSInt32));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32.div_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::DivUInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::DivUInt32));
return Ok{};
}
goto parse_error;
@@ -5723,13 +5723,13 @@ switch (buf[0]) {
switch (buf[6]) {
case '\0':
if (op == "i32.eq"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::EqInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::EqInt32));
return Ok{};
}
goto parse_error;
case 'z':
if (op == "i32.eqz"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::EqZInt32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::EqZInt32));
return Ok{};
}
goto parse_error;
@@ -5740,13 +5740,13 @@ switch (buf[0]) {
switch (buf[10]) {
case '1':
if (op == "i32.extend16_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtendS16Int32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendS16Int32));
return Ok{};
}
goto parse_error;
case '8':
if (op == "i32.extend8_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtendS8Int32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendS8Int32));
return Ok{};
}
goto parse_error;
@@ -5762,13 +5762,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 's':
if (op == "i32.ge_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GeSInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeSInt32));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32.ge_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GeUInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeUInt32));
return Ok{};
}
goto parse_error;
@@ -5779,13 +5779,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 's':
if (op == "i32.gt_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GtSInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GtSInt32));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32.gt_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GtUInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GtUInt32));
return Ok{};
}
goto parse_error;
@@ -5801,13 +5801,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 's':
if (op == "i32.le_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LeSInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LeSInt32));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32.le_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LeUInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LeUInt32));
return Ok{};
}
goto parse_error;
@@ -5818,7 +5818,7 @@ switch (buf[0]) {
switch (buf[8]) {
case '\0':
if (op == "i32.load"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::i32, /*signed=*/false, 4, /*isAtomic=*/false));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::i32, /*signed=*/false, 4, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
@@ -5826,13 +5826,13 @@ switch (buf[0]) {
switch (buf[11]) {
case 's':
if (op == "i32.load16_s"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::i32, /*signed=*/true, 2, /*isAtomic=*/false));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::i32, /*signed=*/true, 2, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32.load16_u"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::i32, /*signed=*/false, 2, /*isAtomic=*/false));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::i32, /*signed=*/false, 2, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
@@ -5843,13 +5843,13 @@ switch (buf[0]) {
switch (buf[10]) {
case 's':
if (op == "i32.load8_s"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::i32, /*signed=*/true, 1, /*isAtomic=*/false));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::i32, /*signed=*/true, 1, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32.load8_u"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::i32, /*signed=*/false, 1, /*isAtomic=*/false));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::i32, /*signed=*/false, 1, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
@@ -5863,13 +5863,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 's':
if (op == "i32.lt_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LtSInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LtSInt32));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32.lt_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LtUInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LtUInt32));
return Ok{};
}
goto parse_error;
@@ -5881,25 +5881,25 @@ switch (buf[0]) {
}
case 'm':
if (op == "i32.mul"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MulInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MulInt32));
return Ok{};
}
goto parse_error;
case 'n':
if (op == "i32.ne"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::NeInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::NeInt32));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "i32.or"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::OrInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::OrInt32));
return Ok{};
}
goto parse_error;
case 'p':
if (op == "i32.popcnt"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::PopcntInt32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::PopcntInt32));
return Ok{};
}
goto parse_error;
@@ -5909,7 +5909,7 @@ switch (buf[0]) {
switch (buf[6]) {
case 'i':
if (op == "i32.reinterpret_f32"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ReinterpretFloat32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ReinterpretFloat32));
return Ok{};
}
goto parse_error;
@@ -5917,13 +5917,13 @@ switch (buf[0]) {
switch (buf[8]) {
case 's':
if (op == "i32.rem_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::RemSInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::RemSInt32));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32.rem_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::RemUInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::RemUInt32));
return Ok{};
}
goto parse_error;
@@ -5937,13 +5937,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 'l':
if (op == "i32.rotl"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::RotLInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::RotLInt32));
return Ok{};
}
goto parse_error;
case 'r':
if (op == "i32.rotr"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::RotRInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::RotRInt32));
return Ok{};
}
goto parse_error;
@@ -5959,7 +5959,7 @@ switch (buf[0]) {
switch (buf[6]) {
case 'l':
if (op == "i32.shl"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::ShlInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::ShlInt32));
return Ok{};
}
goto parse_error;
@@ -5967,13 +5967,13 @@ switch (buf[0]) {
switch (buf[8]) {
case 's':
if (op == "i32.shr_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::ShrSInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::ShrSInt32));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32.shr_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::ShrUInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::ShrUInt32));
return Ok{};
}
goto parse_error;
@@ -5987,19 +5987,19 @@ switch (buf[0]) {
switch (buf[9]) {
case '\0':
if (op == "i32.store"sv) {
- CHECK_ERR(makeStore(ctx, pos, Type::i32, 4, /*isAtomic=*/false));
+ CHECK_ERR(makeStore(ctx, pos, annotations, Type::i32, 4, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
case '1':
if (op == "i32.store16"sv) {
- CHECK_ERR(makeStore(ctx, pos, Type::i32, 2, /*isAtomic=*/false));
+ CHECK_ERR(makeStore(ctx, pos, annotations, Type::i32, 2, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
case '8':
if (op == "i32.store8"sv) {
- CHECK_ERR(makeStore(ctx, pos, Type::i32, 1, /*isAtomic=*/false));
+ CHECK_ERR(makeStore(ctx, pos, annotations, Type::i32, 1, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
@@ -6008,7 +6008,7 @@ switch (buf[0]) {
}
case 'u':
if (op == "i32.sub"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::SubInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubInt32));
return Ok{};
}
goto parse_error;
@@ -6023,13 +6023,13 @@ switch (buf[0]) {
switch (buf[14]) {
case 's':
if (op == "i32.trunc_f32_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncSFloat32ToInt32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncSFloat32ToInt32));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32.trunc_f32_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncUFloat32ToInt32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncUFloat32ToInt32));
return Ok{};
}
goto parse_error;
@@ -6040,13 +6040,13 @@ switch (buf[0]) {
switch (buf[14]) {
case 's':
if (op == "i32.trunc_f64_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncSFloat64ToInt32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncSFloat64ToInt32));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32.trunc_f64_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncUFloat64ToInt32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncUFloat64ToInt32));
return Ok{};
}
goto parse_error;
@@ -6062,13 +6062,13 @@ switch (buf[0]) {
switch (buf[18]) {
case 's':
if (op == "i32.trunc_sat_f32_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncSatSFloat32ToInt32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncSatSFloat32ToInt32));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32.trunc_sat_f32_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncSatUFloat32ToInt32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncSatUFloat32ToInt32));
return Ok{};
}
goto parse_error;
@@ -6079,13 +6079,13 @@ switch (buf[0]) {
switch (buf[18]) {
case 's':
if (op == "i32.trunc_sat_f64_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncSatSFloat64ToInt32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncSatSFloat64ToInt32));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32.trunc_sat_f64_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncSatUFloat64ToInt32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncSatUFloat64ToInt32));
return Ok{};
}
goto parse_error;
@@ -6100,13 +6100,13 @@ switch (buf[0]) {
}
case 'w':
if (op == "i32.wrap_i64"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::WrapInt64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::WrapInt64));
return Ok{};
}
goto parse_error;
case 'x':
if (op == "i32.xor"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::XorInt32));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::XorInt32));
return Ok{};
}
goto parse_error;
@@ -6119,19 +6119,19 @@ switch (buf[0]) {
switch (buf[7]) {
case 'b':
if (op == "i32x4.abs"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::AbsVecI32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::AbsVecI32x4));
return Ok{};
}
goto parse_error;
case 'd':
if (op == "i32x4.add"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AddVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AddVecI32x4));
return Ok{};
}
goto parse_error;
case 'l':
if (op == "i32x4.all_true"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::AllTrueVecI32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::AllTrueVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6140,7 +6140,7 @@ switch (buf[0]) {
}
case 'b':
if (op == "i32x4.bitmask"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::BitmaskVecI32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::BitmaskVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6148,13 +6148,13 @@ switch (buf[0]) {
switch (buf[11]) {
case '1':
if (op == "i32x4.dot_i16x8_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::DotSVecI16x8ToVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::DotSVecI16x8ToVecI32x4));
return Ok{};
}
goto parse_error;
case '8':
if (op == "i32x4.dot_i8x16_i7x16_add_s"sv) {
- CHECK_ERR(makeSIMDTernary(ctx, pos, SIMDTernaryOp::DotI8x16I7x16AddSToVecI32x4));
+ CHECK_ERR(makeSIMDTernary(ctx, pos, annotations, SIMDTernaryOp::DotI8x16I7x16AddSToVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6165,7 +6165,7 @@ switch (buf[0]) {
switch (buf[7]) {
case 'q':
if (op == "i32x4.eq"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::EqVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::EqVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6175,13 +6175,13 @@ switch (buf[0]) {
switch (buf[28]) {
case 's':
if (op == "i32x4.extadd_pairwise_i16x8_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtAddPairwiseSVecI16x8ToI32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtAddPairwiseSVecI16x8ToI32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32x4.extadd_pairwise_i16x8_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtAddPairwiseUVecI16x8ToI32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtAddPairwiseUVecI16x8ToI32x4));
return Ok{};
}
goto parse_error;
@@ -6194,13 +6194,13 @@ switch (buf[0]) {
switch (buf[24]) {
case 's':
if (op == "i32x4.extend_high_i16x8_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtendHighSVecI16x8ToVecI32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendHighSVecI16x8ToVecI32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32x4.extend_high_i16x8_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtendHighUVecI16x8ToVecI32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendHighUVecI16x8ToVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6211,13 +6211,13 @@ switch (buf[0]) {
switch (buf[23]) {
case 's':
if (op == "i32x4.extend_low_i16x8_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtendLowSVecI16x8ToVecI32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendLowSVecI16x8ToVecI32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32x4.extend_low_i16x8_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtendLowUVecI16x8ToVecI32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendLowUVecI16x8ToVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6233,13 +6233,13 @@ switch (buf[0]) {
switch (buf[24]) {
case 's':
if (op == "i32x4.extmul_high_i16x8_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::ExtMulHighSVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::ExtMulHighSVecI32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32x4.extmul_high_i16x8_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::ExtMulHighUVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::ExtMulHighUVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6250,13 +6250,13 @@ switch (buf[0]) {
switch (buf[23]) {
case 's':
if (op == "i32x4.extmul_low_i16x8_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::ExtMulLowSVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::ExtMulLowSVecI32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32x4.extmul_low_i16x8_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::ExtMulLowUVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::ExtMulLowUVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6268,7 +6268,7 @@ switch (buf[0]) {
}
case 'r':
if (op == "i32x4.extract_lane"sv) {
- CHECK_ERR(makeSIMDExtract(ctx, pos, SIMDExtractOp::ExtractLaneVecI32x4, 4));
+ CHECK_ERR(makeSIMDExtract(ctx, pos, annotations, SIMDExtractOp::ExtractLaneVecI32x4, 4));
return Ok{};
}
goto parse_error;
@@ -6284,13 +6284,13 @@ switch (buf[0]) {
switch (buf[9]) {
case 's':
if (op == "i32x4.ge_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GeSVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeSVecI32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32x4.ge_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GeUVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeUVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6301,13 +6301,13 @@ switch (buf[0]) {
switch (buf[9]) {
case 's':
if (op == "i32x4.gt_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GtSVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GtSVecI32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32x4.gt_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GtUVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GtUVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6321,7 +6321,7 @@ switch (buf[0]) {
switch (buf[7]) {
case 'a':
if (op == "i32x4.laneselect"sv) {
- CHECK_ERR(makeSIMDTernary(ctx, pos, SIMDTernaryOp::LaneselectI32x4));
+ CHECK_ERR(makeSIMDTernary(ctx, pos, annotations, SIMDTernaryOp::LaneselectI32x4));
return Ok{};
}
goto parse_error;
@@ -6329,13 +6329,13 @@ switch (buf[0]) {
switch (buf[9]) {
case 's':
if (op == "i32x4.le_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LeSVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LeSVecI32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32x4.le_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LeUVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LeUVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6346,13 +6346,13 @@ switch (buf[0]) {
switch (buf[9]) {
case 's':
if (op == "i32x4.lt_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LtSVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LtSVecI32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32x4.lt_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LtUVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LtUVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6368,13 +6368,13 @@ switch (buf[0]) {
switch (buf[10]) {
case 's':
if (op == "i32x4.max_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MaxSVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MaxSVecI32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32x4.max_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MaxUVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MaxUVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6385,13 +6385,13 @@ switch (buf[0]) {
switch (buf[10]) {
case 's':
if (op == "i32x4.min_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MinSVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MinSVecI32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32x4.min_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MinUVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MinUVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6400,7 +6400,7 @@ switch (buf[0]) {
}
case 'u':
if (op == "i32x4.mul"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MulVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MulVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6411,13 +6411,13 @@ switch (buf[0]) {
switch (buf[8]) {
case '\0':
if (op == "i32x4.ne"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::NeVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::NeVecI32x4));
return Ok{};
}
goto parse_error;
case 'g':
if (op == "i32x4.neg"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::NegVecI32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NegVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6432,13 +6432,13 @@ switch (buf[0]) {
switch (buf[26]) {
case 's':
if (op == "i32x4.relaxed_trunc_f32x4_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::RelaxedTruncSVecF32x4ToVecI32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::RelaxedTruncSVecF32x4ToVecI32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32x4.relaxed_trunc_f32x4_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::RelaxedTruncUVecF32x4ToVecI32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::RelaxedTruncUVecF32x4ToVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6449,13 +6449,13 @@ switch (buf[0]) {
switch (buf[26]) {
case 's':
if (op == "i32x4.relaxed_trunc_f64x2_s_zero"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::RelaxedTruncZeroSVecF64x2ToVecI32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::RelaxedTruncZeroSVecF64x2ToVecI32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32x4.relaxed_trunc_f64x2_u_zero"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::RelaxedTruncZeroUVecF64x2ToVecI32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::RelaxedTruncZeroUVecF64x2ToVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6467,7 +6467,7 @@ switch (buf[0]) {
}
case 'p':
if (op == "i32x4.replace_lane"sv) {
- CHECK_ERR(makeSIMDReplace(ctx, pos, SIMDReplaceOp::ReplaceLaneVecI32x4, 4));
+ CHECK_ERR(makeSIMDReplace(ctx, pos, annotations, SIMDReplaceOp::ReplaceLaneVecI32x4, 4));
return Ok{};
}
goto parse_error;
@@ -6480,7 +6480,7 @@ switch (buf[0]) {
switch (buf[8]) {
case 'l':
if (op == "i32x4.shl"sv) {
- CHECK_ERR(makeSIMDShift(ctx, pos, SIMDShiftOp::ShlVecI32x4));
+ CHECK_ERR(makeSIMDShift(ctx, pos, annotations, SIMDShiftOp::ShlVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6488,13 +6488,13 @@ switch (buf[0]) {
switch (buf[10]) {
case 's':
if (op == "i32x4.shr_s"sv) {
- CHECK_ERR(makeSIMDShift(ctx, pos, SIMDShiftOp::ShrSVecI32x4));
+ CHECK_ERR(makeSIMDShift(ctx, pos, annotations, SIMDShiftOp::ShrSVecI32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32x4.shr_u"sv) {
- CHECK_ERR(makeSIMDShift(ctx, pos, SIMDShiftOp::ShrUVecI32x4));
+ CHECK_ERR(makeSIMDShift(ctx, pos, annotations, SIMDShiftOp::ShrUVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6506,13 +6506,13 @@ switch (buf[0]) {
}
case 'p':
if (op == "i32x4.splat"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::SplatVecI32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::SplatVecI32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32x4.sub"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::SubVecI32x4));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6525,13 +6525,13 @@ switch (buf[0]) {
switch (buf[22]) {
case 's':
if (op == "i32x4.trunc_sat_f32x4_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncSatSVecF32x4ToVecI32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncSatSVecF32x4ToVecI32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32x4.trunc_sat_f32x4_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncSatUVecF32x4ToVecI32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncSatUVecF32x4ToVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6542,13 +6542,13 @@ switch (buf[0]) {
switch (buf[22]) {
case 's':
if (op == "i32x4.trunc_sat_f64x2_s_zero"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncSatZeroSVecF64x2ToVecI32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncSatZeroSVecF64x2ToVecI32x4));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i32x4.trunc_sat_f64x2_u_zero"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncSatZeroUVecF64x2ToVecI32x4));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncSatZeroUVecF64x2ToVecI32x4));
return Ok{};
}
goto parse_error;
@@ -6575,13 +6575,13 @@ switch (buf[0]) {
switch (buf[5]) {
case 'd':
if (op == "i64.add"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AddInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AddInt64));
return Ok{};
}
goto parse_error;
case 'n':
if (op == "i64.and"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AndInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AndInt64));
return Ok{};
}
goto parse_error;
@@ -6591,25 +6591,25 @@ switch (buf[0]) {
switch (buf[15]) {
case '\0':
if (op == "i64.atomic.load"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::i64, /*signed=*/false, 8, /*isAtomic=*/true));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::i64, /*signed=*/false, 8, /*isAtomic=*/true));
return Ok{};
}
goto parse_error;
case '1':
if (op == "i64.atomic.load16_u"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::i64, /*signed=*/false, 2, /*isAtomic=*/true));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::i64, /*signed=*/false, 2, /*isAtomic=*/true));
return Ok{};
}
goto parse_error;
case '3':
if (op == "i64.atomic.load32_u"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::i64, /*signed=*/false, 4, /*isAtomic=*/true));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::i64, /*signed=*/false, 4, /*isAtomic=*/true));
return Ok{};
}
goto parse_error;
case '8':
if (op == "i64.atomic.load8_u"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::i64, /*signed=*/false, 1, /*isAtomic=*/true));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::i64, /*signed=*/false, 1, /*isAtomic=*/true));
return Ok{};
}
goto parse_error;
@@ -6624,13 +6624,13 @@ switch (buf[0]) {
switch (buf[16]) {
case 'd':
if (op == "i64.atomic.rmw.add"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAdd, Type::i64, 8));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWAdd, Type::i64, 8));
return Ok{};
}
goto parse_error;
case 'n':
if (op == "i64.atomic.rmw.and"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAnd, Type::i64, 8));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWAnd, Type::i64, 8));
return Ok{};
}
goto parse_error;
@@ -6639,19 +6639,19 @@ switch (buf[0]) {
}
case 'c':
if (op == "i64.atomic.rmw.cmpxchg"sv) {
- CHECK_ERR(makeAtomicCmpxchg(ctx, pos, Type::i64, 8));
+ CHECK_ERR(makeAtomicCmpxchg(ctx, pos, annotations, Type::i64, 8));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "i64.atomic.rmw.or"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWOr, Type::i64, 8));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWOr, Type::i64, 8));
return Ok{};
}
goto parse_error;
case 's':
if (op == "i64.atomic.rmw.sub"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWSub, Type::i64, 8));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWSub, Type::i64, 8));
return Ok{};
}
goto parse_error;
@@ -6659,13 +6659,13 @@ switch (buf[0]) {
switch (buf[16]) {
case 'c':
if (op == "i64.atomic.rmw.xchg"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXchg, Type::i64, 8));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWXchg, Type::i64, 8));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "i64.atomic.rmw.xor"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXor, Type::i64, 8));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWXor, Type::i64, 8));
return Ok{};
}
goto parse_error;
@@ -6681,13 +6681,13 @@ switch (buf[0]) {
switch (buf[18]) {
case 'd':
if (op == "i64.atomic.rmw16.add_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAdd, Type::i64, 2));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWAdd, Type::i64, 2));
return Ok{};
}
goto parse_error;
case 'n':
if (op == "i64.atomic.rmw16.and_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAnd, Type::i64, 2));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWAnd, Type::i64, 2));
return Ok{};
}
goto parse_error;
@@ -6696,19 +6696,19 @@ switch (buf[0]) {
}
case 'c':
if (op == "i64.atomic.rmw16.cmpxchg_u"sv) {
- CHECK_ERR(makeAtomicCmpxchg(ctx, pos, Type::i64, 2));
+ CHECK_ERR(makeAtomicCmpxchg(ctx, pos, annotations, Type::i64, 2));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "i64.atomic.rmw16.or_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWOr, Type::i64, 2));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWOr, Type::i64, 2));
return Ok{};
}
goto parse_error;
case 's':
if (op == "i64.atomic.rmw16.sub_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWSub, Type::i64, 2));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWSub, Type::i64, 2));
return Ok{};
}
goto parse_error;
@@ -6716,13 +6716,13 @@ switch (buf[0]) {
switch (buf[18]) {
case 'c':
if (op == "i64.atomic.rmw16.xchg_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXchg, Type::i64, 2));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWXchg, Type::i64, 2));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "i64.atomic.rmw16.xor_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXor, Type::i64, 2));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWXor, Type::i64, 2));
return Ok{};
}
goto parse_error;
@@ -6738,13 +6738,13 @@ switch (buf[0]) {
switch (buf[18]) {
case 'd':
if (op == "i64.atomic.rmw32.add_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAdd, Type::i64, 4));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWAdd, Type::i64, 4));
return Ok{};
}
goto parse_error;
case 'n':
if (op == "i64.atomic.rmw32.and_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAnd, Type::i64, 4));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWAnd, Type::i64, 4));
return Ok{};
}
goto parse_error;
@@ -6753,19 +6753,19 @@ switch (buf[0]) {
}
case 'c':
if (op == "i64.atomic.rmw32.cmpxchg_u"sv) {
- CHECK_ERR(makeAtomicCmpxchg(ctx, pos, Type::i64, 4));
+ CHECK_ERR(makeAtomicCmpxchg(ctx, pos, annotations, Type::i64, 4));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "i64.atomic.rmw32.or_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWOr, Type::i64, 4));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWOr, Type::i64, 4));
return Ok{};
}
goto parse_error;
case 's':
if (op == "i64.atomic.rmw32.sub_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWSub, Type::i64, 4));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWSub, Type::i64, 4));
return Ok{};
}
goto parse_error;
@@ -6773,13 +6773,13 @@ switch (buf[0]) {
switch (buf[18]) {
case 'c':
if (op == "i64.atomic.rmw32.xchg_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXchg, Type::i64, 4));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWXchg, Type::i64, 4));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "i64.atomic.rmw32.xor_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXor, Type::i64, 4));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWXor, Type::i64, 4));
return Ok{};
}
goto parse_error;
@@ -6795,13 +6795,13 @@ switch (buf[0]) {
switch (buf[17]) {
case 'd':
if (op == "i64.atomic.rmw8.add_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAdd, Type::i64, 1));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWAdd, Type::i64, 1));
return Ok{};
}
goto parse_error;
case 'n':
if (op == "i64.atomic.rmw8.and_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWAnd, Type::i64, 1));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWAnd, Type::i64, 1));
return Ok{};
}
goto parse_error;
@@ -6810,19 +6810,19 @@ switch (buf[0]) {
}
case 'c':
if (op == "i64.atomic.rmw8.cmpxchg_u"sv) {
- CHECK_ERR(makeAtomicCmpxchg(ctx, pos, Type::i64, 1));
+ CHECK_ERR(makeAtomicCmpxchg(ctx, pos, annotations, Type::i64, 1));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "i64.atomic.rmw8.or_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWOr, Type::i64, 1));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWOr, Type::i64, 1));
return Ok{};
}
goto parse_error;
case 's':
if (op == "i64.atomic.rmw8.sub_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWSub, Type::i64, 1));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWSub, Type::i64, 1));
return Ok{};
}
goto parse_error;
@@ -6830,13 +6830,13 @@ switch (buf[0]) {
switch (buf[17]) {
case 'c':
if (op == "i64.atomic.rmw8.xchg_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXchg, Type::i64, 1));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWXchg, Type::i64, 1));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "i64.atomic.rmw8.xor_u"sv) {
- CHECK_ERR(makeAtomicRMW(ctx, pos, AtomicRMWOp::RMWXor, Type::i64, 1));
+ CHECK_ERR(makeAtomicRMW(ctx, pos, annotations, AtomicRMWOp::RMWXor, Type::i64, 1));
return Ok{};
}
goto parse_error;
@@ -6853,25 +6853,25 @@ switch (buf[0]) {
switch (buf[16]) {
case '\0':
if (op == "i64.atomic.store"sv) {
- CHECK_ERR(makeStore(ctx, pos, Type::i64, 8, /*isAtomic=*/true));
+ CHECK_ERR(makeStore(ctx, pos, annotations, Type::i64, 8, /*isAtomic=*/true));
return Ok{};
}
goto parse_error;
case '1':
if (op == "i64.atomic.store16"sv) {
- CHECK_ERR(makeStore(ctx, pos, Type::i64, 2, /*isAtomic=*/true));
+ CHECK_ERR(makeStore(ctx, pos, annotations, Type::i64, 2, /*isAtomic=*/true));
return Ok{};
}
goto parse_error;
case '3':
if (op == "i64.atomic.store32"sv) {
- CHECK_ERR(makeStore(ctx, pos, Type::i64, 4, /*isAtomic=*/true));
+ CHECK_ERR(makeStore(ctx, pos, annotations, Type::i64, 4, /*isAtomic=*/true));
return Ok{};
}
goto parse_error;
case '8':
if (op == "i64.atomic.store8"sv) {
- CHECK_ERR(makeStore(ctx, pos, Type::i64, 1, /*isAtomic=*/true));
+ CHECK_ERR(makeStore(ctx, pos, annotations, Type::i64, 1, /*isAtomic=*/true));
return Ok{};
}
goto parse_error;
@@ -6888,19 +6888,19 @@ switch (buf[0]) {
switch (buf[5]) {
case 'l':
if (op == "i64.clz"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ClzInt64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ClzInt64));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "i64.const"sv) {
- CHECK_ERR(makeConst(ctx, pos, Type::i64));
+ CHECK_ERR(makeConst(ctx, pos, annotations, Type::i64));
return Ok{};
}
goto parse_error;
case 't':
if (op == "i64.ctz"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::CtzInt64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::CtzInt64));
return Ok{};
}
goto parse_error;
@@ -6911,13 +6911,13 @@ switch (buf[0]) {
switch (buf[8]) {
case 's':
if (op == "i64.div_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::DivSInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::DivSInt64));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64.div_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::DivUInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::DivUInt64));
return Ok{};
}
goto parse_error;
@@ -6930,13 +6930,13 @@ switch (buf[0]) {
switch (buf[6]) {
case '\0':
if (op == "i64.eq"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::EqInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::EqInt64));
return Ok{};
}
goto parse_error;
case 'z':
if (op == "i64.eqz"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::EqZInt64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::EqZInt64));
return Ok{};
}
goto parse_error;
@@ -6947,19 +6947,19 @@ switch (buf[0]) {
switch (buf[10]) {
case '1':
if (op == "i64.extend16_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtendS16Int64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendS16Int64));
return Ok{};
}
goto parse_error;
case '3':
if (op == "i64.extend32_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtendS32Int64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendS32Int64));
return Ok{};
}
goto parse_error;
case '8':
if (op == "i64.extend8_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtendS8Int64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendS8Int64));
return Ok{};
}
goto parse_error;
@@ -6967,13 +6967,13 @@ switch (buf[0]) {
switch (buf[15]) {
case 's':
if (op == "i64.extend_i32_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtendSInt32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendSInt32));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64.extend_i32_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtendUInt32));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendUInt32));
return Ok{};
}
goto parse_error;
@@ -6992,13 +6992,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 's':
if (op == "i64.ge_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GeSInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeSInt64));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64.ge_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GeUInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeUInt64));
return Ok{};
}
goto parse_error;
@@ -7009,13 +7009,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 's':
if (op == "i64.gt_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GtSInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GtSInt64));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64.gt_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GtUInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GtUInt64));
return Ok{};
}
goto parse_error;
@@ -7031,13 +7031,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 's':
if (op == "i64.le_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LeSInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LeSInt64));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64.le_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LeUInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LeUInt64));
return Ok{};
}
goto parse_error;
@@ -7048,7 +7048,7 @@ switch (buf[0]) {
switch (buf[8]) {
case '\0':
if (op == "i64.load"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::i64, /*signed=*/false, 8, /*isAtomic=*/false));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::i64, /*signed=*/false, 8, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
@@ -7056,13 +7056,13 @@ switch (buf[0]) {
switch (buf[11]) {
case 's':
if (op == "i64.load16_s"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::i64, /*signed=*/true, 2, /*isAtomic=*/false));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::i64, /*signed=*/true, 2, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64.load16_u"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::i64, /*signed=*/false, 2, /*isAtomic=*/false));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::i64, /*signed=*/false, 2, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
@@ -7073,13 +7073,13 @@ switch (buf[0]) {
switch (buf[11]) {
case 's':
if (op == "i64.load32_s"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::i64, /*signed=*/true, 4, /*isAtomic=*/false));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::i64, /*signed=*/true, 4, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64.load32_u"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::i64, /*signed=*/false, 4, /*isAtomic=*/false));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::i64, /*signed=*/false, 4, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
@@ -7090,13 +7090,13 @@ switch (buf[0]) {
switch (buf[10]) {
case 's':
if (op == "i64.load8_s"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::i64, /*signed=*/true, 1, /*isAtomic=*/false));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::i64, /*signed=*/true, 1, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64.load8_u"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::i64, /*signed=*/false, 1, /*isAtomic=*/false));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::i64, /*signed=*/false, 1, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
@@ -7110,13 +7110,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 's':
if (op == "i64.lt_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LtSInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LtSInt64));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64.lt_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LtUInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LtUInt64));
return Ok{};
}
goto parse_error;
@@ -7128,25 +7128,25 @@ switch (buf[0]) {
}
case 'm':
if (op == "i64.mul"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MulInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MulInt64));
return Ok{};
}
goto parse_error;
case 'n':
if (op == "i64.ne"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::NeInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::NeInt64));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "i64.or"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::OrInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::OrInt64));
return Ok{};
}
goto parse_error;
case 'p':
if (op == "i64.popcnt"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::PopcntInt64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::PopcntInt64));
return Ok{};
}
goto parse_error;
@@ -7156,7 +7156,7 @@ switch (buf[0]) {
switch (buf[6]) {
case 'i':
if (op == "i64.reinterpret_f64"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ReinterpretFloat64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ReinterpretFloat64));
return Ok{};
}
goto parse_error;
@@ -7164,13 +7164,13 @@ switch (buf[0]) {
switch (buf[8]) {
case 's':
if (op == "i64.rem_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::RemSInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::RemSInt64));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64.rem_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::RemUInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::RemUInt64));
return Ok{};
}
goto parse_error;
@@ -7184,13 +7184,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 'l':
if (op == "i64.rotl"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::RotLInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::RotLInt64));
return Ok{};
}
goto parse_error;
case 'r':
if (op == "i64.rotr"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::RotRInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::RotRInt64));
return Ok{};
}
goto parse_error;
@@ -7206,7 +7206,7 @@ switch (buf[0]) {
switch (buf[6]) {
case 'l':
if (op == "i64.shl"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::ShlInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::ShlInt64));
return Ok{};
}
goto parse_error;
@@ -7214,13 +7214,13 @@ switch (buf[0]) {
switch (buf[8]) {
case 's':
if (op == "i64.shr_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::ShrSInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::ShrSInt64));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64.shr_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::ShrUInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::ShrUInt64));
return Ok{};
}
goto parse_error;
@@ -7234,25 +7234,25 @@ switch (buf[0]) {
switch (buf[9]) {
case '\0':
if (op == "i64.store"sv) {
- CHECK_ERR(makeStore(ctx, pos, Type::i64, 8, /*isAtomic=*/false));
+ CHECK_ERR(makeStore(ctx, pos, annotations, Type::i64, 8, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
case '1':
if (op == "i64.store16"sv) {
- CHECK_ERR(makeStore(ctx, pos, Type::i64, 2, /*isAtomic=*/false));
+ CHECK_ERR(makeStore(ctx, pos, annotations, Type::i64, 2, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
case '3':
if (op == "i64.store32"sv) {
- CHECK_ERR(makeStore(ctx, pos, Type::i64, 4, /*isAtomic=*/false));
+ CHECK_ERR(makeStore(ctx, pos, annotations, Type::i64, 4, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
case '8':
if (op == "i64.store8"sv) {
- CHECK_ERR(makeStore(ctx, pos, Type::i64, 1, /*isAtomic=*/false));
+ CHECK_ERR(makeStore(ctx, pos, annotations, Type::i64, 1, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
@@ -7261,7 +7261,7 @@ switch (buf[0]) {
}
case 'u':
if (op == "i64.sub"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::SubInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubInt64));
return Ok{};
}
goto parse_error;
@@ -7276,13 +7276,13 @@ switch (buf[0]) {
switch (buf[14]) {
case 's':
if (op == "i64.trunc_f32_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncSFloat32ToInt64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncSFloat32ToInt64));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64.trunc_f32_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncUFloat32ToInt64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncUFloat32ToInt64));
return Ok{};
}
goto parse_error;
@@ -7293,13 +7293,13 @@ switch (buf[0]) {
switch (buf[14]) {
case 's':
if (op == "i64.trunc_f64_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncSFloat64ToInt64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncSFloat64ToInt64));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64.trunc_f64_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncUFloat64ToInt64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncUFloat64ToInt64));
return Ok{};
}
goto parse_error;
@@ -7315,13 +7315,13 @@ switch (buf[0]) {
switch (buf[18]) {
case 's':
if (op == "i64.trunc_sat_f32_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncSatSFloat32ToInt64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncSatSFloat32ToInt64));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64.trunc_sat_f32_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncSatUFloat32ToInt64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncSatUFloat32ToInt64));
return Ok{};
}
goto parse_error;
@@ -7332,13 +7332,13 @@ switch (buf[0]) {
switch (buf[18]) {
case 's':
if (op == "i64.trunc_sat_f64_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncSatSFloat64ToInt64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncSatSFloat64ToInt64));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64.trunc_sat_f64_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::TruncSatUFloat64ToInt64));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::TruncSatUFloat64ToInt64));
return Ok{};
}
goto parse_error;
@@ -7353,7 +7353,7 @@ switch (buf[0]) {
}
case 'x':
if (op == "i64.xor"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::XorInt64));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::XorInt64));
return Ok{};
}
goto parse_error;
@@ -7366,19 +7366,19 @@ switch (buf[0]) {
switch (buf[7]) {
case 'b':
if (op == "i64x2.abs"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::AbsVecI64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::AbsVecI64x2));
return Ok{};
}
goto parse_error;
case 'd':
if (op == "i64x2.add"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AddVecI64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AddVecI64x2));
return Ok{};
}
goto parse_error;
case 'l':
if (op == "i64x2.all_true"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::AllTrueVecI64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::AllTrueVecI64x2));
return Ok{};
}
goto parse_error;
@@ -7387,7 +7387,7 @@ switch (buf[0]) {
}
case 'b':
if (op == "i64x2.bitmask"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::BitmaskVecI64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::BitmaskVecI64x2));
return Ok{};
}
goto parse_error;
@@ -7395,7 +7395,7 @@ switch (buf[0]) {
switch (buf[7]) {
case 'q':
if (op == "i64x2.eq"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::EqVecI64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::EqVecI64x2));
return Ok{};
}
goto parse_error;
@@ -7407,13 +7407,13 @@ switch (buf[0]) {
switch (buf[24]) {
case 's':
if (op == "i64x2.extend_high_i32x4_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtendHighSVecI32x4ToVecI64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendHighSVecI32x4ToVecI64x2));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64x2.extend_high_i32x4_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtendHighUVecI32x4ToVecI64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendHighUVecI32x4ToVecI64x2));
return Ok{};
}
goto parse_error;
@@ -7424,13 +7424,13 @@ switch (buf[0]) {
switch (buf[23]) {
case 's':
if (op == "i64x2.extend_low_i32x4_s"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtendLowSVecI32x4ToVecI64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendLowSVecI32x4ToVecI64x2));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64x2.extend_low_i32x4_u"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::ExtendLowUVecI32x4ToVecI64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::ExtendLowUVecI32x4ToVecI64x2));
return Ok{};
}
goto parse_error;
@@ -7446,13 +7446,13 @@ switch (buf[0]) {
switch (buf[24]) {
case 's':
if (op == "i64x2.extmul_high_i32x4_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::ExtMulHighSVecI64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::ExtMulHighSVecI64x2));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64x2.extmul_high_i32x4_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::ExtMulHighUVecI64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::ExtMulHighUVecI64x2));
return Ok{};
}
goto parse_error;
@@ -7463,13 +7463,13 @@ switch (buf[0]) {
switch (buf[23]) {
case 's':
if (op == "i64x2.extmul_low_i32x4_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::ExtMulLowSVecI64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::ExtMulLowSVecI64x2));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64x2.extmul_low_i32x4_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::ExtMulLowUVecI64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::ExtMulLowUVecI64x2));
return Ok{};
}
goto parse_error;
@@ -7481,7 +7481,7 @@ switch (buf[0]) {
}
case 'r':
if (op == "i64x2.extract_lane"sv) {
- CHECK_ERR(makeSIMDExtract(ctx, pos, SIMDExtractOp::ExtractLaneVecI64x2, 2));
+ CHECK_ERR(makeSIMDExtract(ctx, pos, annotations, SIMDExtractOp::ExtractLaneVecI64x2, 2));
return Ok{};
}
goto parse_error;
@@ -7495,13 +7495,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 'e':
if (op == "i64x2.ge_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GeSVecI64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeSVecI64x2));
return Ok{};
}
goto parse_error;
case 't':
if (op == "i64x2.gt_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GtSVecI64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GtSVecI64x2));
return Ok{};
}
goto parse_error;
@@ -7512,19 +7512,19 @@ switch (buf[0]) {
switch (buf[7]) {
case 'a':
if (op == "i64x2.laneselect"sv) {
- CHECK_ERR(makeSIMDTernary(ctx, pos, SIMDTernaryOp::LaneselectI64x2));
+ CHECK_ERR(makeSIMDTernary(ctx, pos, annotations, SIMDTernaryOp::LaneselectI64x2));
return Ok{};
}
goto parse_error;
case 'e':
if (op == "i64x2.le_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LeSVecI64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LeSVecI64x2));
return Ok{};
}
goto parse_error;
case 't':
if (op == "i64x2.lt_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LtSVecI64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LtSVecI64x2));
return Ok{};
}
goto parse_error;
@@ -7533,7 +7533,7 @@ switch (buf[0]) {
}
case 'm':
if (op == "i64x2.mul"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MulVecI64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MulVecI64x2));
return Ok{};
}
goto parse_error;
@@ -7541,13 +7541,13 @@ switch (buf[0]) {
switch (buf[8]) {
case '\0':
if (op == "i64x2.ne"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::NeVecI64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::NeVecI64x2));
return Ok{};
}
goto parse_error;
case 'g':
if (op == "i64x2.neg"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::NegVecI64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NegVecI64x2));
return Ok{};
}
goto parse_error;
@@ -7556,7 +7556,7 @@ switch (buf[0]) {
}
case 'r':
if (op == "i64x2.replace_lane"sv) {
- CHECK_ERR(makeSIMDReplace(ctx, pos, SIMDReplaceOp::ReplaceLaneVecI64x2, 2));
+ CHECK_ERR(makeSIMDReplace(ctx, pos, annotations, SIMDReplaceOp::ReplaceLaneVecI64x2, 2));
return Ok{};
}
goto parse_error;
@@ -7566,7 +7566,7 @@ switch (buf[0]) {
switch (buf[8]) {
case 'l':
if (op == "i64x2.shl"sv) {
- CHECK_ERR(makeSIMDShift(ctx, pos, SIMDShiftOp::ShlVecI64x2));
+ CHECK_ERR(makeSIMDShift(ctx, pos, annotations, SIMDShiftOp::ShlVecI64x2));
return Ok{};
}
goto parse_error;
@@ -7574,13 +7574,13 @@ switch (buf[0]) {
switch (buf[10]) {
case 's':
if (op == "i64x2.shr_s"sv) {
- CHECK_ERR(makeSIMDShift(ctx, pos, SIMDShiftOp::ShrSVecI64x2));
+ CHECK_ERR(makeSIMDShift(ctx, pos, annotations, SIMDShiftOp::ShrSVecI64x2));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64x2.shr_u"sv) {
- CHECK_ERR(makeSIMDShift(ctx, pos, SIMDShiftOp::ShrUVecI64x2));
+ CHECK_ERR(makeSIMDShift(ctx, pos, annotations, SIMDShiftOp::ShrUVecI64x2));
return Ok{};
}
goto parse_error;
@@ -7592,13 +7592,13 @@ switch (buf[0]) {
}
case 'p':
if (op == "i64x2.splat"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::SplatVecI64x2));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::SplatVecI64x2));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i64x2.sub"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::SubVecI64x2));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubVecI64x2));
return Ok{};
}
goto parse_error;
@@ -7617,7 +7617,7 @@ switch (buf[0]) {
switch (buf[7]) {
case 'b':
if (op == "i8x16.abs"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::AbsVecI8x16));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::AbsVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7625,7 +7625,7 @@ switch (buf[0]) {
switch (buf[9]) {
case '\0':
if (op == "i8x16.add"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AddVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AddVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7633,13 +7633,13 @@ switch (buf[0]) {
switch (buf[14]) {
case 's':
if (op == "i8x16.add_sat_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AddSatSVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AddSatSVecI8x16));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i8x16.add_sat_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AddSatUVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AddSatUVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7651,13 +7651,13 @@ switch (buf[0]) {
}
case 'l':
if (op == "i8x16.all_true"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::AllTrueVecI8x16));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::AllTrueVecI8x16));
return Ok{};
}
goto parse_error;
case 'v':
if (op == "i8x16.avgr_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AvgrUVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AvgrUVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7666,7 +7666,7 @@ switch (buf[0]) {
}
case 'b':
if (op == "i8x16.bitmask"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::BitmaskVecI8x16));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::BitmaskVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7674,7 +7674,7 @@ switch (buf[0]) {
switch (buf[7]) {
case 'q':
if (op == "i8x16.eq"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::EqVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::EqVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7682,13 +7682,13 @@ switch (buf[0]) {
switch (buf[19]) {
case 's':
if (op == "i8x16.extract_lane_s"sv) {
- CHECK_ERR(makeSIMDExtract(ctx, pos, SIMDExtractOp::ExtractLaneSVecI8x16, 16));
+ CHECK_ERR(makeSIMDExtract(ctx, pos, annotations, SIMDExtractOp::ExtractLaneSVecI8x16, 16));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i8x16.extract_lane_u"sv) {
- CHECK_ERR(makeSIMDExtract(ctx, pos, SIMDExtractOp::ExtractLaneUVecI8x16, 16));
+ CHECK_ERR(makeSIMDExtract(ctx, pos, annotations, SIMDExtractOp::ExtractLaneUVecI8x16, 16));
return Ok{};
}
goto parse_error;
@@ -7704,13 +7704,13 @@ switch (buf[0]) {
switch (buf[9]) {
case 's':
if (op == "i8x16.ge_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GeSVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeSVecI8x16));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i8x16.ge_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GeUVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GeUVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7721,13 +7721,13 @@ switch (buf[0]) {
switch (buf[9]) {
case 's':
if (op == "i8x16.gt_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GtSVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GtSVecI8x16));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i8x16.gt_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::GtUVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::GtUVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7741,7 +7741,7 @@ switch (buf[0]) {
switch (buf[7]) {
case 'a':
if (op == "i8x16.laneselect"sv) {
- CHECK_ERR(makeSIMDTernary(ctx, pos, SIMDTernaryOp::LaneselectI8x16));
+ CHECK_ERR(makeSIMDTernary(ctx, pos, annotations, SIMDTernaryOp::LaneselectI8x16));
return Ok{};
}
goto parse_error;
@@ -7749,13 +7749,13 @@ switch (buf[0]) {
switch (buf[9]) {
case 's':
if (op == "i8x16.le_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LeSVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LeSVecI8x16));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i8x16.le_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LeUVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LeUVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7766,13 +7766,13 @@ switch (buf[0]) {
switch (buf[9]) {
case 's':
if (op == "i8x16.lt_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LtSVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LtSVecI8x16));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i8x16.lt_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::LtUVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::LtUVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7788,13 +7788,13 @@ switch (buf[0]) {
switch (buf[10]) {
case 's':
if (op == "i8x16.max_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MaxSVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MaxSVecI8x16));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i8x16.max_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MaxUVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MaxUVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7805,13 +7805,13 @@ switch (buf[0]) {
switch (buf[10]) {
case 's':
if (op == "i8x16.min_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MinSVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MinSVecI8x16));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i8x16.min_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::MinUVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::MinUVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7827,13 +7827,13 @@ switch (buf[0]) {
switch (buf[19]) {
case 's':
if (op == "i8x16.narrow_i16x8_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::NarrowSVecI16x8ToVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::NarrowSVecI16x8ToVecI8x16));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i8x16.narrow_i16x8_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::NarrowUVecI16x8ToVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::NarrowUVecI16x8ToVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7844,13 +7844,13 @@ switch (buf[0]) {
switch (buf[8]) {
case '\0':
if (op == "i8x16.ne"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::NeVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::NeVecI8x16));
return Ok{};
}
goto parse_error;
case 'g':
if (op == "i8x16.neg"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::NegVecI8x16));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NegVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7862,7 +7862,7 @@ switch (buf[0]) {
}
case 'p':
if (op == "i8x16.popcnt"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::PopcntVecI8x16));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::PopcntVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7870,13 +7870,13 @@ switch (buf[0]) {
switch (buf[8]) {
case 'l':
if (op == "i8x16.relaxed_swizzle"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::RelaxedSwizzleVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::RelaxedSwizzleVecI8x16));
return Ok{};
}
goto parse_error;
case 'p':
if (op == "i8x16.replace_lane"sv) {
- CHECK_ERR(makeSIMDReplace(ctx, pos, SIMDReplaceOp::ReplaceLaneVecI8x16, 16));
+ CHECK_ERR(makeSIMDReplace(ctx, pos, annotations, SIMDReplaceOp::ReplaceLaneVecI8x16, 16));
return Ok{};
}
goto parse_error;
@@ -7889,7 +7889,7 @@ switch (buf[0]) {
switch (buf[8]) {
case 'l':
if (op == "i8x16.shl"sv) {
- CHECK_ERR(makeSIMDShift(ctx, pos, SIMDShiftOp::ShlVecI8x16));
+ CHECK_ERR(makeSIMDShift(ctx, pos, annotations, SIMDShiftOp::ShlVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7897,13 +7897,13 @@ switch (buf[0]) {
switch (buf[10]) {
case 's':
if (op == "i8x16.shr_s"sv) {
- CHECK_ERR(makeSIMDShift(ctx, pos, SIMDShiftOp::ShrSVecI8x16));
+ CHECK_ERR(makeSIMDShift(ctx, pos, annotations, SIMDShiftOp::ShrSVecI8x16));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i8x16.shr_u"sv) {
- CHECK_ERR(makeSIMDShift(ctx, pos, SIMDShiftOp::ShrUVecI8x16));
+ CHECK_ERR(makeSIMDShift(ctx, pos, annotations, SIMDShiftOp::ShrUVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7912,7 +7912,7 @@ switch (buf[0]) {
}
case 'u':
if (op == "i8x16.shuffle"sv) {
- CHECK_ERR(makeSIMDShuffle(ctx, pos));
+ CHECK_ERR(makeSIMDShuffle(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -7921,7 +7921,7 @@ switch (buf[0]) {
}
case 'p':
if (op == "i8x16.splat"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::SplatVecI8x16));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::SplatVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7929,7 +7929,7 @@ switch (buf[0]) {
switch (buf[9]) {
case '\0':
if (op == "i8x16.sub"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::SubVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7937,13 +7937,13 @@ switch (buf[0]) {
switch (buf[14]) {
case 's':
if (op == "i8x16.sub_sat_s"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::SubSatSVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubSatSVecI8x16));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "i8x16.sub_sat_u"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::SubSatUVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SubSatUVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7955,7 +7955,7 @@ switch (buf[0]) {
}
case 'w':
if (op == "i8x16.swizzle"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::SwizzleVecI8x16));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::SwizzleVecI8x16));
return Ok{};
}
goto parse_error;
@@ -7972,19 +7972,19 @@ switch (buf[0]) {
switch (buf[6]) {
case 'g':
if (op == "local.get"sv) {
- CHECK_ERR(makeLocalGet(ctx, pos));
+ CHECK_ERR(makeLocalGet(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 's':
if (op == "local.set"sv) {
- CHECK_ERR(makeLocalSet(ctx, pos));
+ CHECK_ERR(makeLocalSet(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 't':
if (op == "local.tee"sv) {
- CHECK_ERR(makeLocalTee(ctx, pos));
+ CHECK_ERR(makeLocalTee(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -7997,7 +7997,7 @@ switch (buf[0]) {
switch (buf[14]) {
case 'n':
if (op == "memory.atomic.notify"sv) {
- CHECK_ERR(makeAtomicNotify(ctx, pos));
+ CHECK_ERR(makeAtomicNotify(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8005,13 +8005,13 @@ switch (buf[0]) {
switch (buf[18]) {
case '3':
if (op == "memory.atomic.wait32"sv) {
- CHECK_ERR(makeAtomicWait(ctx, pos, Type::i32));
+ CHECK_ERR(makeAtomicWait(ctx, pos, annotations, Type::i32));
return Ok{};
}
goto parse_error;
case '6':
if (op == "memory.atomic.wait64"sv) {
- CHECK_ERR(makeAtomicWait(ctx, pos, Type::i64));
+ CHECK_ERR(makeAtomicWait(ctx, pos, annotations, Type::i64));
return Ok{};
}
goto parse_error;
@@ -8023,31 +8023,31 @@ switch (buf[0]) {
}
case 'c':
if (op == "memory.copy"sv) {
- CHECK_ERR(makeMemoryCopy(ctx, pos));
+ CHECK_ERR(makeMemoryCopy(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 'f':
if (op == "memory.fill"sv) {
- CHECK_ERR(makeMemoryFill(ctx, pos));
+ CHECK_ERR(makeMemoryFill(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 'g':
if (op == "memory.grow"sv) {
- CHECK_ERR(makeMemoryGrow(ctx, pos));
+ CHECK_ERR(makeMemoryGrow(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 'i':
if (op == "memory.init"sv) {
- CHECK_ERR(makeMemoryInit(ctx, pos));
+ CHECK_ERR(makeMemoryInit(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 's':
if (op == "memory.size"sv) {
- CHECK_ERR(makeMemorySize(ctx, pos));
+ CHECK_ERR(makeMemorySize(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8056,13 +8056,13 @@ switch (buf[0]) {
}
case 'n':
if (op == "nop"sv) {
- CHECK_ERR(makeNop(ctx, pos));
+ CHECK_ERR(makeNop(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 'p':
if (op == "pop"sv) {
- CHECK_ERR(makePop(ctx, pos));
+ CHECK_ERR(makePop(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8072,25 +8072,25 @@ switch (buf[0]) {
switch (buf[4]) {
case 'a':
if (op == "ref.as_non_null"sv) {
- CHECK_ERR(makeRefAs(ctx, pos, RefAsNonNull));
+ CHECK_ERR(makeRefAs(ctx, pos, annotations, RefAsNonNull));
return Ok{};
}
goto parse_error;
case 'c':
if (op == "ref.cast"sv) {
- CHECK_ERR(makeRefCast(ctx, pos));
+ CHECK_ERR(makeRefCast(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 'e':
if (op == "ref.eq"sv) {
- CHECK_ERR(makeRefEq(ctx, pos));
+ CHECK_ERR(makeRefEq(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 'f':
if (op == "ref.func"sv) {
- CHECK_ERR(makeRefFunc(ctx, pos));
+ CHECK_ERR(makeRefFunc(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8098,13 +8098,13 @@ switch (buf[0]) {
switch (buf[5]) {
case '3':
if (op == "ref.i31"sv) {
- CHECK_ERR(makeRefI31(ctx, pos));
+ CHECK_ERR(makeRefI31(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 's':
if (op == "ref.is_null"sv) {
- CHECK_ERR(makeRefIsNull(ctx, pos));
+ CHECK_ERR(makeRefIsNull(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8113,13 +8113,13 @@ switch (buf[0]) {
}
case 'n':
if (op == "ref.null"sv) {
- CHECK_ERR(makeRefNull(ctx, pos));
+ CHECK_ERR(makeRefNull(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 't':
if (op == "ref.test"sv) {
- CHECK_ERR(makeRefTest(ctx, pos));
+ CHECK_ERR(makeRefTest(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8128,7 +8128,7 @@ switch (buf[0]) {
}
case 's':
if (op == "resume"sv) {
- CHECK_ERR(makeResume(ctx, pos));
+ CHECK_ERR(makeResume(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8136,7 +8136,7 @@ switch (buf[0]) {
switch (buf[3]) {
case 'h':
if (op == "rethrow"sv) {
- CHECK_ERR(makeRethrow(ctx, pos));
+ CHECK_ERR(makeRethrow(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8144,7 +8144,7 @@ switch (buf[0]) {
switch (buf[6]) {
case '\0':
if (op == "return"sv) {
- CHECK_ERR(makeReturn(ctx, pos));
+ CHECK_ERR(makeReturn(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8152,7 +8152,7 @@ switch (buf[0]) {
switch (buf[11]) {
case '\0':
if (op == "return_call"sv) {
- CHECK_ERR(makeCall(ctx, pos, /*isReturn=*/true));
+ CHECK_ERR(makeCall(ctx, pos, annotations, /*isReturn=*/true));
return Ok{};
}
goto parse_error;
@@ -8160,13 +8160,13 @@ switch (buf[0]) {
switch (buf[12]) {
case 'i':
if (op == "return_call_indirect"sv) {
- CHECK_ERR(makeCallIndirect(ctx, pos, /*isReturn=*/true));
+ CHECK_ERR(makeCallIndirect(ctx, pos, annotations, /*isReturn=*/true));
return Ok{};
}
goto parse_error;
case 'r':
if (op == "return_call_ref"sv) {
- CHECK_ERR(makeCallRef(ctx, pos, /*isReturn=*/true));
+ CHECK_ERR(makeCallRef(ctx, pos, annotations, /*isReturn=*/true));
return Ok{};
}
goto parse_error;
@@ -8189,7 +8189,7 @@ switch (buf[0]) {
switch (buf[1]) {
case 'e':
if (op == "select"sv) {
- CHECK_ERR(makeSelect(ctx, pos));
+ CHECK_ERR(makeSelect(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8203,7 +8203,7 @@ switch (buf[0]) {
switch (buf[10]) {
case 'i':
if (op == "string.as_iter"sv) {
- CHECK_ERR(makeStringAs(ctx, pos, StringAsIter));
+ CHECK_ERR(makeStringAs(ctx, pos, annotations, StringAsIter));
return Ok{};
}
goto parse_error;
@@ -8211,13 +8211,13 @@ switch (buf[0]) {
switch (buf[13]) {
case '1':
if (op == "string.as_wtf16"sv) {
- CHECK_ERR(makeStringAs(ctx, pos, StringAsWTF16));
+ CHECK_ERR(makeStringAs(ctx, pos, annotations, StringAsWTF16));
return Ok{};
}
goto parse_error;
case '8':
if (op == "string.as_wtf8"sv) {
- CHECK_ERR(makeStringAs(ctx, pos, StringAsWTF8));
+ CHECK_ERR(makeStringAs(ctx, pos, annotations, StringAsWTF8));
return Ok{};
}
goto parse_error;
@@ -8231,7 +8231,7 @@ switch (buf[0]) {
switch (buf[9]) {
case 'm':
if (op == "string.compare"sv) {
- CHECK_ERR(makeStringEq(ctx, pos, StringEqCompare));
+ CHECK_ERR(makeStringEq(ctx, pos, annotations, StringEqCompare));
return Ok{};
}
goto parse_error;
@@ -8239,13 +8239,13 @@ switch (buf[0]) {
switch (buf[10]) {
case 'c':
if (op == "string.concat"sv) {
- CHECK_ERR(makeStringConcat(ctx, pos));
+ CHECK_ERR(makeStringConcat(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 's':
if (op == "string.const"sv) {
- CHECK_ERR(makeStringConst(ctx, pos));
+ CHECK_ERR(makeStringConst(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8263,13 +8263,13 @@ switch (buf[0]) {
switch (buf[24]) {
case '\0':
if (op == "string.encode_lossy_utf8"sv) {
- CHECK_ERR(makeStringEncode(ctx, pos, StringEncodeLossyUTF8));
+ CHECK_ERR(makeStringEncode(ctx, pos, annotations, StringEncodeLossyUTF8));
return Ok{};
}
goto parse_error;
case '_':
if (op == "string.encode_lossy_utf8_array"sv) {
- CHECK_ERR(makeStringEncode(ctx, pos, StringEncodeLossyUTF8Array));
+ CHECK_ERR(makeStringEncode(ctx, pos, annotations, StringEncodeLossyUTF8Array));
return Ok{};
}
goto parse_error;
@@ -8280,13 +8280,13 @@ switch (buf[0]) {
switch (buf[18]) {
case '\0':
if (op == "string.encode_utf8"sv) {
- CHECK_ERR(makeStringEncode(ctx, pos, StringEncodeUTF8));
+ CHECK_ERR(makeStringEncode(ctx, pos, annotations, StringEncodeUTF8));
return Ok{};
}
goto parse_error;
case '_':
if (op == "string.encode_utf8_array"sv) {
- CHECK_ERR(makeStringEncode(ctx, pos, StringEncodeUTF8Array));
+ CHECK_ERR(makeStringEncode(ctx, pos, annotations, StringEncodeUTF8Array));
return Ok{};
}
goto parse_error;
@@ -8299,13 +8299,13 @@ switch (buf[0]) {
switch (buf[19]) {
case '\0':
if (op == "string.encode_wtf16"sv) {
- CHECK_ERR(makeStringEncode(ctx, pos, StringEncodeWTF16));
+ CHECK_ERR(makeStringEncode(ctx, pos, annotations, StringEncodeWTF16));
return Ok{};
}
goto parse_error;
case '_':
if (op == "string.encode_wtf16_array"sv) {
- CHECK_ERR(makeStringEncode(ctx, pos, StringEncodeWTF16Array));
+ CHECK_ERR(makeStringEncode(ctx, pos, annotations, StringEncodeWTF16Array));
return Ok{};
}
goto parse_error;
@@ -8316,13 +8316,13 @@ switch (buf[0]) {
switch (buf[18]) {
case '\0':
if (op == "string.encode_wtf8"sv) {
- CHECK_ERR(makeStringEncode(ctx, pos, StringEncodeWTF8));
+ CHECK_ERR(makeStringEncode(ctx, pos, annotations, StringEncodeWTF8));
return Ok{};
}
goto parse_error;
case '_':
if (op == "string.encode_wtf8_array"sv) {
- CHECK_ERR(makeStringEncode(ctx, pos, StringEncodeWTF8Array));
+ CHECK_ERR(makeStringEncode(ctx, pos, annotations, StringEncodeWTF8Array));
return Ok{};
}
goto parse_error;
@@ -8337,7 +8337,7 @@ switch (buf[0]) {
}
case 'q':
if (op == "string.eq"sv) {
- CHECK_ERR(makeStringEq(ctx, pos, StringEqEqual));
+ CHECK_ERR(makeStringEq(ctx, pos, annotations, StringEqEqual));
return Ok{};
}
goto parse_error;
@@ -8346,19 +8346,19 @@ switch (buf[0]) {
}
case 'f':
if (op == "string.from_code_point"sv) {
- CHECK_ERR(makeStringNew(ctx, pos, StringNewFromCodePoint, false));
+ CHECK_ERR(makeStringNew(ctx, pos, annotations, StringNewFromCodePoint, false));
return Ok{};
}
goto parse_error;
case 'h':
if (op == "string.hash"sv) {
- CHECK_ERR(makeStringMeasure(ctx, pos, StringMeasureHash));
+ CHECK_ERR(makeStringMeasure(ctx, pos, annotations, StringMeasureHash));
return Ok{};
}
goto parse_error;
case 'i':
if (op == "string.is_usv_sequence"sv) {
- CHECK_ERR(makeStringMeasure(ctx, pos, StringMeasureIsUSV));
+ CHECK_ERR(makeStringMeasure(ctx, pos, annotations, StringMeasureIsUSV));
return Ok{};
}
goto parse_error;
@@ -8366,7 +8366,7 @@ switch (buf[0]) {
switch (buf[15]) {
case 'u':
if (op == "string.measure_utf8"sv) {
- CHECK_ERR(makeStringMeasure(ctx, pos, StringMeasureUTF8));
+ CHECK_ERR(makeStringMeasure(ctx, pos, annotations, StringMeasureUTF8));
return Ok{};
}
goto parse_error;
@@ -8374,13 +8374,13 @@ switch (buf[0]) {
switch (buf[18]) {
case '1':
if (op == "string.measure_wtf16"sv) {
- CHECK_ERR(makeStringMeasure(ctx, pos, StringMeasureWTF16));
+ CHECK_ERR(makeStringMeasure(ctx, pos, annotations, StringMeasureWTF16));
return Ok{};
}
goto parse_error;
case '8':
if (op == "string.measure_wtf8"sv) {
- CHECK_ERR(makeStringMeasure(ctx, pos, StringMeasureWTF8));
+ CHECK_ERR(makeStringMeasure(ctx, pos, annotations, StringMeasureWTF8));
return Ok{};
}
goto parse_error;
@@ -8396,13 +8396,13 @@ switch (buf[0]) {
switch (buf[21]) {
case '\0':
if (op == "string.new_lossy_utf8"sv) {
- CHECK_ERR(makeStringNew(ctx, pos, StringNewLossyUTF8, false));
+ CHECK_ERR(makeStringNew(ctx, pos, annotations, StringNewLossyUTF8, false));
return Ok{};
}
goto parse_error;
case '_':
if (op == "string.new_lossy_utf8_array"sv) {
- CHECK_ERR(makeStringNew(ctx, pos, StringNewLossyUTF8Array, false));
+ CHECK_ERR(makeStringNew(ctx, pos, annotations, StringNewLossyUTF8Array, false));
return Ok{};
}
goto parse_error;
@@ -8413,7 +8413,7 @@ switch (buf[0]) {
switch (buf[15]) {
case '\0':
if (op == "string.new_utf8"sv) {
- CHECK_ERR(makeStringNew(ctx, pos, StringNewUTF8, false));
+ CHECK_ERR(makeStringNew(ctx, pos, annotations, StringNewUTF8, false));
return Ok{};
}
goto parse_error;
@@ -8423,13 +8423,13 @@ switch (buf[0]) {
switch (buf[21]) {
case '\0':
if (op == "string.new_utf8_array"sv) {
- CHECK_ERR(makeStringNew(ctx, pos, StringNewUTF8Array, false));
+ CHECK_ERR(makeStringNew(ctx, pos, annotations, StringNewUTF8Array, false));
return Ok{};
}
goto parse_error;
case '_':
if (op == "string.new_utf8_array_try"sv) {
- CHECK_ERR(makeStringNew(ctx, pos, StringNewUTF8Array, true));
+ CHECK_ERR(makeStringNew(ctx, pos, annotations, StringNewUTF8Array, true));
return Ok{};
}
goto parse_error;
@@ -8438,7 +8438,7 @@ switch (buf[0]) {
}
case 't':
if (op == "string.new_utf8_try"sv) {
- CHECK_ERR(makeStringNew(ctx, pos, StringNewUTF8, true));
+ CHECK_ERR(makeStringNew(ctx, pos, annotations, StringNewUTF8, true));
return Ok{};
}
goto parse_error;
@@ -8454,13 +8454,13 @@ switch (buf[0]) {
switch (buf[16]) {
case '\0':
if (op == "string.new_wtf16"sv) {
- CHECK_ERR(makeStringNew(ctx, pos, StringNewWTF16, false));
+ CHECK_ERR(makeStringNew(ctx, pos, annotations, StringNewWTF16, false));
return Ok{};
}
goto parse_error;
case '_':
if (op == "string.new_wtf16_array"sv) {
- CHECK_ERR(makeStringNew(ctx, pos, StringNewWTF16Array, false));
+ CHECK_ERR(makeStringNew(ctx, pos, annotations, StringNewWTF16Array, false));
return Ok{};
}
goto parse_error;
@@ -8471,13 +8471,13 @@ switch (buf[0]) {
switch (buf[15]) {
case '\0':
if (op == "string.new_wtf8"sv) {
- CHECK_ERR(makeStringNew(ctx, pos, StringNewWTF8, false));
+ CHECK_ERR(makeStringNew(ctx, pos, annotations, StringNewWTF8, false));
return Ok{};
}
goto parse_error;
case '_':
if (op == "string.new_wtf8_array"sv) {
- CHECK_ERR(makeStringNew(ctx, pos, StringNewWTF8Array, false));
+ CHECK_ERR(makeStringNew(ctx, pos, annotations, StringNewWTF8Array, false));
return Ok{};
}
goto parse_error;
@@ -8499,25 +8499,25 @@ switch (buf[0]) {
switch (buf[16]) {
case 'a':
if (op == "stringview_iter.advance"sv) {
- CHECK_ERR(makeStringIterMove(ctx, pos, StringIterMoveAdvance));
+ CHECK_ERR(makeStringIterMove(ctx, pos, annotations, StringIterMoveAdvance));
return Ok{};
}
goto parse_error;
case 'n':
if (op == "stringview_iter.next"sv) {
- CHECK_ERR(makeStringIterNext(ctx, pos));
+ CHECK_ERR(makeStringIterNext(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 'r':
if (op == "stringview_iter.rewind"sv) {
- CHECK_ERR(makeStringIterMove(ctx, pos, StringIterMoveRewind));
+ CHECK_ERR(makeStringIterMove(ctx, pos, annotations, StringIterMoveRewind));
return Ok{};
}
goto parse_error;
case 's':
if (op == "stringview_iter.slice"sv) {
- CHECK_ERR(makeStringSliceIter(ctx, pos));
+ CHECK_ERR(makeStringSliceIter(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8530,19 +8530,19 @@ switch (buf[0]) {
switch (buf[17]) {
case 'g':
if (op == "stringview_wtf16.get_codeunit"sv) {
- CHECK_ERR(makeStringWTF16Get(ctx, pos));
+ CHECK_ERR(makeStringWTF16Get(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 'l':
if (op == "stringview_wtf16.length"sv) {
- CHECK_ERR(makeStringMeasure(ctx, pos, StringMeasureWTF16View));
+ CHECK_ERR(makeStringMeasure(ctx, pos, annotations, StringMeasureWTF16View));
return Ok{};
}
goto parse_error;
case 's':
if (op == "stringview_wtf16.slice"sv) {
- CHECK_ERR(makeStringSliceWTF(ctx, pos, StringSliceWTF16));
+ CHECK_ERR(makeStringSliceWTF(ctx, pos, annotations, StringSliceWTF16));
return Ok{};
}
goto parse_error;
@@ -8553,13 +8553,13 @@ switch (buf[0]) {
switch (buf[16]) {
case 'a':
if (op == "stringview_wtf8.advance"sv) {
- CHECK_ERR(makeStringWTF8Advance(ctx, pos));
+ CHECK_ERR(makeStringWTF8Advance(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 's':
if (op == "stringview_wtf8.slice"sv) {
- CHECK_ERR(makeStringSliceWTF(ctx, pos, StringSliceWTF8));
+ CHECK_ERR(makeStringSliceWTF(ctx, pos, annotations, StringSliceWTF8));
return Ok{};
}
goto parse_error;
@@ -8581,7 +8581,7 @@ switch (buf[0]) {
switch (buf[10]) {
case '\0':
if (op == "struct.get"sv) {
- CHECK_ERR(makeStructGet(ctx, pos));
+ CHECK_ERR(makeStructGet(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8589,13 +8589,13 @@ switch (buf[0]) {
switch (buf[11]) {
case 's':
if (op == "struct.get_s"sv) {
- CHECK_ERR(makeStructGet(ctx, pos, true));
+ CHECK_ERR(makeStructGet(ctx, pos, annotations, true));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "struct.get_u"sv) {
- CHECK_ERR(makeStructGet(ctx, pos, false));
+ CHECK_ERR(makeStructGet(ctx, pos, annotations, false));
return Ok{};
}
goto parse_error;
@@ -8609,13 +8609,13 @@ switch (buf[0]) {
switch (buf[10]) {
case '\0':
if (op == "struct.new"sv) {
- CHECK_ERR(makeStructNew(ctx, pos, false));
+ CHECK_ERR(makeStructNew(ctx, pos, annotations, false));
return Ok{};
}
goto parse_error;
case '_':
if (op == "struct.new_default"sv) {
- CHECK_ERR(makeStructNew(ctx, pos, true));
+ CHECK_ERR(makeStructNew(ctx, pos, annotations, true));
return Ok{};
}
goto parse_error;
@@ -8624,7 +8624,7 @@ switch (buf[0]) {
}
case 's':
if (op == "struct.set"sv) {
- CHECK_ERR(makeStructSet(ctx, pos));
+ CHECK_ERR(makeStructSet(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8643,13 +8643,13 @@ switch (buf[0]) {
switch (buf[6]) {
case 'c':
if (op == "table.copy"sv) {
- CHECK_ERR(makeTableCopy(ctx, pos));
+ CHECK_ERR(makeTableCopy(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 'f':
if (op == "table.fill"sv) {
- CHECK_ERR(makeTableFill(ctx, pos));
+ CHECK_ERR(makeTableFill(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8657,13 +8657,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 'e':
if (op == "table.get"sv) {
- CHECK_ERR(makeTableGet(ctx, pos));
+ CHECK_ERR(makeTableGet(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 'r':
if (op == "table.grow"sv) {
- CHECK_ERR(makeTableGrow(ctx, pos));
+ CHECK_ERR(makeTableGrow(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8674,13 +8674,13 @@ switch (buf[0]) {
switch (buf[7]) {
case 'e':
if (op == "table.set"sv) {
- CHECK_ERR(makeTableSet(ctx, pos));
+ CHECK_ERR(makeTableSet(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 'i':
if (op == "table.size"sv) {
- CHECK_ERR(makeTableSize(ctx, pos));
+ CHECK_ERR(makeTableSize(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8694,13 +8694,13 @@ switch (buf[0]) {
switch (buf[5]) {
case '\0':
if (op == "throw"sv) {
- CHECK_ERR(makeThrow(ctx, pos));
+ CHECK_ERR(makeThrow(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case '_':
if (op == "throw_ref"sv) {
- CHECK_ERR(makeThrowRef(ctx, pos));
+ CHECK_ERR(makeThrowRef(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8711,19 +8711,19 @@ switch (buf[0]) {
switch (buf[6]) {
case 'd':
if (op == "tuple.drop"sv) {
- CHECK_ERR(makeTupleDrop(ctx, pos));
+ CHECK_ERR(makeTupleDrop(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 'e':
if (op == "tuple.extract"sv) {
- CHECK_ERR(makeTupleExtract(ctx, pos));
+ CHECK_ERR(makeTupleExtract(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
case 'm':
if (op == "tuple.make"sv) {
- CHECK_ERR(makeTupleMake(ctx, pos));
+ CHECK_ERR(makeTupleMake(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8735,7 +8735,7 @@ switch (buf[0]) {
}
case 'u':
if (op == "unreachable"sv) {
- CHECK_ERR(makeUnreachable(ctx, pos));
+ CHECK_ERR(makeUnreachable(ctx, pos, annotations));
return Ok{};
}
goto parse_error;
@@ -8747,13 +8747,13 @@ switch (buf[0]) {
switch (buf[8]) {
case '\0':
if (op == "v128.and"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AndVec128));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AndVec128));
return Ok{};
}
goto parse_error;
case 'n':
if (op == "v128.andnot"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::AndNotVec128));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::AndNotVec128));
return Ok{};
}
goto parse_error;
@@ -8762,7 +8762,7 @@ switch (buf[0]) {
}
case 'y':
if (op == "v128.any_true"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::AnyTrueVec128));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::AnyTrueVec128));
return Ok{};
}
goto parse_error;
@@ -8771,13 +8771,13 @@ switch (buf[0]) {
}
case 'b':
if (op == "v128.bitselect"sv) {
- CHECK_ERR(makeSIMDTernary(ctx, pos, SIMDTernaryOp::Bitselect));
+ CHECK_ERR(makeSIMDTernary(ctx, pos, annotations, SIMDTernaryOp::Bitselect));
return Ok{};
}
goto parse_error;
case 'c':
if (op == "v128.const"sv) {
- CHECK_ERR(makeConst(ctx, pos, Type::v128));
+ CHECK_ERR(makeConst(ctx, pos, annotations, Type::v128));
return Ok{};
}
goto parse_error;
@@ -8785,7 +8785,7 @@ switch (buf[0]) {
switch (buf[9]) {
case '\0':
if (op == "v128.load"sv) {
- CHECK_ERR(makeLoad(ctx, pos, Type::v128, /*signed=*/false, 16, /*isAtomic=*/false));
+ CHECK_ERR(makeLoad(ctx, pos, annotations, Type::v128, /*signed=*/false, 16, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
@@ -8795,13 +8795,13 @@ switch (buf[0]) {
switch (buf[12]) {
case 'l':
if (op == "v128.load16_lane"sv) {
- CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Load16LaneVec128, 2));
+ CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, annotations, SIMDLoadStoreLaneOp::Load16LaneVec128, 2));
return Ok{};
}
goto parse_error;
case 's':
if (op == "v128.load16_splat"sv) {
- CHECK_ERR(makeSIMDLoad(ctx, pos, SIMDLoadOp::Load16SplatVec128, 2));
+ CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, SIMDLoadOp::Load16SplatVec128, 2));
return Ok{};
}
goto parse_error;
@@ -8812,13 +8812,13 @@ switch (buf[0]) {
switch (buf[14]) {
case 's':
if (op == "v128.load16x4_s"sv) {
- CHECK_ERR(makeSIMDLoad(ctx, pos, SIMDLoadOp::Load16x4SVec128, 8));
+ CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, SIMDLoadOp::Load16x4SVec128, 8));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "v128.load16x4_u"sv) {
- CHECK_ERR(makeSIMDLoad(ctx, pos, SIMDLoadOp::Load16x4UVec128, 8));
+ CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, SIMDLoadOp::Load16x4UVec128, 8));
return Ok{};
}
goto parse_error;
@@ -8834,19 +8834,19 @@ switch (buf[0]) {
switch (buf[12]) {
case 'l':
if (op == "v128.load32_lane"sv) {
- CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Load32LaneVec128, 4));
+ CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, annotations, SIMDLoadStoreLaneOp::Load32LaneVec128, 4));
return Ok{};
}
goto parse_error;
case 's':
if (op == "v128.load32_splat"sv) {
- CHECK_ERR(makeSIMDLoad(ctx, pos, SIMDLoadOp::Load32SplatVec128, 4));
+ CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, SIMDLoadOp::Load32SplatVec128, 4));
return Ok{};
}
goto parse_error;
case 'z':
if (op == "v128.load32_zero"sv) {
- CHECK_ERR(makeSIMDLoad(ctx, pos, SIMDLoadOp::Load32ZeroVec128, 4));
+ CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, SIMDLoadOp::Load32ZeroVec128, 4));
return Ok{};
}
goto parse_error;
@@ -8857,13 +8857,13 @@ switch (buf[0]) {
switch (buf[14]) {
case 's':
if (op == "v128.load32x2_s"sv) {
- CHECK_ERR(makeSIMDLoad(ctx, pos, SIMDLoadOp::Load32x2SVec128, 8));
+ CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, SIMDLoadOp::Load32x2SVec128, 8));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "v128.load32x2_u"sv) {
- CHECK_ERR(makeSIMDLoad(ctx, pos, SIMDLoadOp::Load32x2UVec128, 8));
+ CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, SIMDLoadOp::Load32x2UVec128, 8));
return Ok{};
}
goto parse_error;
@@ -8877,19 +8877,19 @@ switch (buf[0]) {
switch (buf[12]) {
case 'l':
if (op == "v128.load64_lane"sv) {
- CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Load64LaneVec128, 8));
+ CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, annotations, SIMDLoadStoreLaneOp::Load64LaneVec128, 8));
return Ok{};
}
goto parse_error;
case 's':
if (op == "v128.load64_splat"sv) {
- CHECK_ERR(makeSIMDLoad(ctx, pos, SIMDLoadOp::Load64SplatVec128, 8));
+ CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, SIMDLoadOp::Load64SplatVec128, 8));
return Ok{};
}
goto parse_error;
case 'z':
if (op == "v128.load64_zero"sv) {
- CHECK_ERR(makeSIMDLoad(ctx, pos, SIMDLoadOp::Load64ZeroVec128, 8));
+ CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, SIMDLoadOp::Load64ZeroVec128, 8));
return Ok{};
}
goto parse_error;
@@ -8902,13 +8902,13 @@ switch (buf[0]) {
switch (buf[11]) {
case 'l':
if (op == "v128.load8_lane"sv) {
- CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Load8LaneVec128, 1));
+ CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, annotations, SIMDLoadStoreLaneOp::Load8LaneVec128, 1));
return Ok{};
}
goto parse_error;
case 's':
if (op == "v128.load8_splat"sv) {
- CHECK_ERR(makeSIMDLoad(ctx, pos, SIMDLoadOp::Load8SplatVec128, 1));
+ CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, SIMDLoadOp::Load8SplatVec128, 1));
return Ok{};
}
goto parse_error;
@@ -8919,13 +8919,13 @@ switch (buf[0]) {
switch (buf[13]) {
case 's':
if (op == "v128.load8x8_s"sv) {
- CHECK_ERR(makeSIMDLoad(ctx, pos, SIMDLoadOp::Load8x8SVec128, 8));
+ CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, SIMDLoadOp::Load8x8SVec128, 8));
return Ok{};
}
goto parse_error;
case 'u':
if (op == "v128.load8x8_u"sv) {
- CHECK_ERR(makeSIMDLoad(ctx, pos, SIMDLoadOp::Load8x8UVec128, 8));
+ CHECK_ERR(makeSIMDLoad(ctx, pos, annotations, SIMDLoadOp::Load8x8UVec128, 8));
return Ok{};
}
goto parse_error;
@@ -8940,13 +8940,13 @@ switch (buf[0]) {
}
case 'n':
if (op == "v128.not"sv) {
- CHECK_ERR(makeUnary(ctx, pos, UnaryOp::NotVec128));
+ CHECK_ERR(makeUnary(ctx, pos, annotations, UnaryOp::NotVec128));
return Ok{};
}
goto parse_error;
case 'o':
if (op == "v128.or"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::OrVec128));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::OrVec128));
return Ok{};
}
goto parse_error;
@@ -8954,31 +8954,31 @@ switch (buf[0]) {
switch (buf[10]) {
case '\0':
if (op == "v128.store"sv) {
- CHECK_ERR(makeStore(ctx, pos, Type::v128, 16, /*isAtomic=*/false));
+ CHECK_ERR(makeStore(ctx, pos, annotations, Type::v128, 16, /*isAtomic=*/false));
return Ok{};
}
goto parse_error;
case '1':
if (op == "v128.store16_lane"sv) {
- CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Store16LaneVec128, 2));
+ CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, annotations, SIMDLoadStoreLaneOp::Store16LaneVec128, 2));
return Ok{};
}
goto parse_error;
case '3':
if (op == "v128.store32_lane"sv) {
- CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Store32LaneVec128, 4));
+ CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, annotations, SIMDLoadStoreLaneOp::Store32LaneVec128, 4));
return Ok{};
}
goto parse_error;
case '6':
if (op == "v128.store64_lane"sv) {
- CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Store64LaneVec128, 8));
+ CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, annotations, SIMDLoadStoreLaneOp::Store64LaneVec128, 8));
return Ok{};
}
goto parse_error;
case '8':
if (op == "v128.store8_lane"sv) {
- CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, SIMDLoadStoreLaneOp::Store8LaneVec128, 1));
+ CHECK_ERR(makeSIMDLoadStoreLane(ctx, pos, annotations, SIMDLoadStoreLaneOp::Store8LaneVec128, 1));
return Ok{};
}
goto parse_error;
@@ -8987,7 +8987,7 @@ switch (buf[0]) {
}
case 'x':
if (op == "v128.xor"sv) {
- CHECK_ERR(makeBinary(ctx, pos, BinaryOp::XorVec128));
+ CHECK_ERR(makeBinary(ctx, pos, annotations, BinaryOp::XorVec128));
return Ok{};
}
goto parse_error;
diff --git a/src/parser/contexts.h b/src/parser/contexts.h
index d2f0ea2d0..6505d11a4 100644
--- a/src/parser/contexts.h
+++ b/src/parser/contexts.h
@@ -355,20 +355,32 @@ struct NullInstrParserCtx {
MemargT getMemarg(uint64_t, uint32_t) { return Ok{}; }
template<typename BlockTypeT>
- Result<> makeBlock(Index, std::optional<Name>, BlockTypeT) {
+ Result<> makeBlock(Index,
+ const std::vector<Annotation>&,
+ std::optional<Name>,
+ BlockTypeT) {
return Ok{};
}
template<typename BlockTypeT>
- Result<> makeIf(Index, std::optional<Name>, BlockTypeT) {
+ Result<> makeIf(Index,
+ const std::vector<Annotation>&,
+ std::optional<Name>,
+ BlockTypeT) {
return Ok{};
}
Result<> visitElse() { return Ok{}; }
template<typename BlockTypeT>
- Result<> makeLoop(Index, std::optional<Name>, BlockTypeT) {
+ Result<> makeLoop(Index,
+ const std::vector<Annotation>&,
+ std::optional<Name>,
+ BlockTypeT) {
return Ok{};
}
template<typename BlockTypeT>
- Result<> makeTry(Index, std::optional<Name>, BlockTypeT) {
+ Result<> makeTry(Index,
+ const std::vector<Annotation>&,
+ std::optional<Name>,
+ BlockTypeT) {
return Ok{};
}
Result<> visitCatch(Index, TagIdxT) { return Ok{}; }
@@ -383,198 +395,427 @@ struct NullInstrParserCtx {
CatchT makeCatchAll(LabelIdxT) { return Ok{}; }
CatchT makeCatchAllRef(LabelIdxT) { return Ok{}; }
template<typename BlockTypeT>
- Result<> makeTryTable(Index, std::optional<Name>, BlockTypeT, CatchListT) {
+ Result<> makeTryTable(Index,
+ const std::vector<Annotation>&,
+ std::optional<Name>,
+ BlockTypeT,
+ CatchListT) {
return Ok{};
}
TagLabelListT makeTagLabelList() { return Ok{}; }
void appendTagLabel(TagLabelListT&, TagIdxT, LabelIdxT) {}
- Result<> makeUnreachable(Index) { return Ok{}; }
- Result<> makeNop(Index) { return Ok{}; }
- Result<> makeBinary(Index, BinaryOp) { return Ok{}; }
- Result<> makeUnary(Index, UnaryOp) { return Ok{}; }
- template<typename ResultsT> Result<> makeSelect(Index, ResultsT*) {
+ void setSrcLoc(const Annotation&) {}
+
+ Result<> makeUnreachable(Index, const std::vector<Annotation>&) {
+ return Ok{};
+ }
+ Result<> makeNop(Index, const std::vector<Annotation>&) { return Ok{}; }
+ Result<> makeBinary(Index, const std::vector<Annotation>&, BinaryOp) {
+ return Ok{};
+ }
+ Result<> makeUnary(Index, const std::vector<Annotation>&, UnaryOp) {
+ return Ok{};
+ }
+ template<typename ResultsT>
+ Result<> makeSelect(Index, const std::vector<Annotation>&, ResultsT*) {
+ return Ok{};
+ }
+ Result<> makeDrop(Index, const std::vector<Annotation>&) { return Ok{}; }
+ Result<> makeMemorySize(Index, const std::vector<Annotation>&, MemoryIdxT*) {
+ return Ok{};
+ }
+ Result<> makeMemoryGrow(Index, const std::vector<Annotation>&, MemoryIdxT*) {
+ return Ok{};
+ }
+ Result<> makeLocalGet(Index, const std::vector<Annotation>&, LocalIdxT) {
+ return Ok{};
+ }
+ Result<> makeLocalTee(Index, const std::vector<Annotation>&, LocalIdxT) {
+ return Ok{};
+ }
+ Result<> makeLocalSet(Index, const std::vector<Annotation>&, LocalIdxT) {
+ return Ok{};
+ }
+ Result<> makeGlobalGet(Index, const std::vector<Annotation>&, GlobalIdxT) {
+ return Ok{};
+ }
+ Result<> makeGlobalSet(Index, const std::vector<Annotation>&, GlobalIdxT) {
return Ok{};
}
- Result<> makeDrop(Index) { return Ok{}; }
- Result<> makeMemorySize(Index, MemoryIdxT*) { return Ok{}; }
- Result<> makeMemoryGrow(Index, MemoryIdxT*) { return Ok{}; }
- Result<> makeLocalGet(Index, LocalIdxT) { return Ok{}; }
- Result<> makeLocalTee(Index, LocalIdxT) { return Ok{}; }
- Result<> makeLocalSet(Index, LocalIdxT) { return Ok{}; }
- Result<> makeGlobalGet(Index, GlobalIdxT) { return Ok{}; }
- Result<> makeGlobalSet(Index, GlobalIdxT) { return Ok{}; }
- Result<> makeI32Const(Index, uint32_t) { return Ok{}; }
- Result<> makeI64Const(Index, uint64_t) { return Ok{}; }
- Result<> makeF32Const(Index, float) { return Ok{}; }
- Result<> makeF64Const(Index, double) { return Ok{}; }
- Result<> makeI8x16Const(Index, const std::array<uint8_t, 16>&) {
+ Result<> makeI32Const(Index, const std::vector<Annotation>&, uint32_t) {
+ return Ok{};
+ }
+ Result<> makeI64Const(Index, const std::vector<Annotation>&, uint64_t) {
return Ok{};
}
- Result<> makeI16x8Const(Index, const std::array<uint16_t, 8>&) {
+ Result<> makeF32Const(Index, const std::vector<Annotation>&, float) {
return Ok{};
}
- Result<> makeI32x4Const(Index, const std::array<uint32_t, 4>&) {
+ Result<> makeF64Const(Index, const std::vector<Annotation>&, double) {
return Ok{};
}
- Result<> makeI64x2Const(Index, const std::array<uint64_t, 2>&) {
+ Result<> makeI8x16Const(Index,
+ const std::vector<Annotation>&,
+ const std::array<uint8_t, 16>&) {
return Ok{};
}
- Result<> makeF32x4Const(Index, const std::array<float, 4>&) { return Ok{}; }
- Result<> makeF64x2Const(Index, const std::array<double, 2>&) { return Ok{}; }
- Result<> makeLoad(Index, Type, bool, int, bool, MemoryIdxT*, MemargT) {
+ Result<> makeI16x8Const(Index,
+ const std::vector<Annotation>&,
+ const std::array<uint16_t, 8>&) {
return Ok{};
}
- Result<> makeStore(Index, Type, int, bool, MemoryIdxT*, MemargT) {
+ Result<> makeI32x4Const(Index,
+ const std::vector<Annotation>&,
+ const std::array<uint32_t, 4>&) {
return Ok{};
}
- Result<> makeAtomicRMW(Index, AtomicRMWOp, Type, int, MemoryIdxT*, MemargT) {
+ Result<> makeI64x2Const(Index,
+ const std::vector<Annotation>&,
+ const std::array<uint64_t, 2>&) {
return Ok{};
}
- Result<> makeAtomicCmpxchg(Index, Type, int, MemoryIdxT*, MemargT) {
+ Result<> makeF32x4Const(Index,
+ const std::vector<Annotation>&,
+ const std::array<float, 4>&) {
return Ok{};
}
- Result<> makeAtomicWait(Index, Type, MemoryIdxT*, MemargT) { return Ok{}; }
- Result<> makeAtomicNotify(Index, MemoryIdxT*, MemargT) { return Ok{}; }
- Result<> makeAtomicFence(Index) { return Ok{}; }
- Result<> makeSIMDExtract(Index, SIMDExtractOp, uint8_t) { return Ok{}; }
- Result<> makeSIMDReplace(Index, SIMDReplaceOp, uint8_t) { return Ok{}; }
- Result<> makeSIMDShuffle(Index, const std::array<uint8_t, 16>&) {
+ Result<> makeF64x2Const(Index,
+ const std::vector<Annotation>&,
+ const std::array<double, 2>&) {
return Ok{};
}
- Result<> makeSIMDTernary(Index, SIMDTernaryOp) { return Ok{}; }
- Result<> makeSIMDShift(Index, SIMDShiftOp) { return Ok{}; }
- Result<> makeSIMDLoad(Index, SIMDLoadOp, MemoryIdxT*, MemargT) {
+ Result<> makeLoad(Index,
+ const std::vector<Annotation>&,
+ Type,
+ bool,
+ int,
+ bool,
+ MemoryIdxT*,
+ MemargT) {
return Ok{};
}
- Result<> makeSIMDLoadStoreLane(
- Index, SIMDLoadStoreLaneOp, MemoryIdxT*, MemargT, uint8_t) {
+ Result<> makeStore(Index,
+ const std::vector<Annotation>&,
+ Type,
+ int,
+ bool,
+ MemoryIdxT*,
+ MemargT) {
+ return Ok{};
+ }
+ Result<> makeAtomicRMW(Index,
+ const std::vector<Annotation>&,
+ AtomicRMWOp,
+ Type,
+ int,
+ MemoryIdxT*,
+ MemargT) {
+ return Ok{};
+ }
+ Result<> makeAtomicCmpxchg(
+ Index, const std::vector<Annotation>&, Type, int, MemoryIdxT*, MemargT) {
+ return Ok{};
+ }
+ Result<> makeAtomicWait(
+ Index, const std::vector<Annotation>&, Type, MemoryIdxT*, MemargT) {
+ return Ok{};
+ }
+ Result<> makeAtomicNotify(Index,
+ const std::vector<Annotation>&,
+ MemoryIdxT*,
+ MemargT) {
+ return Ok{};
+ }
+ Result<> makeAtomicFence(Index, const std::vector<Annotation>&) {
+ return Ok{};
+ }
+ Result<> makeSIMDExtract(Index,
+ const std::vector<Annotation>&,
+ SIMDExtractOp,
+ uint8_t) {
+ return Ok{};
+ }
+ Result<> makeSIMDReplace(Index,
+ const std::vector<Annotation>&,
+ SIMDReplaceOp,
+ uint8_t) {
+ return Ok{};
+ }
+ Result<> makeSIMDShuffle(Index,
+ const std::vector<Annotation>&,
+ const std::array<uint8_t, 16>&) {
+ return Ok{};
+ }
+ Result<>
+ makeSIMDTernary(Index, const std::vector<Annotation>&, SIMDTernaryOp) {
+ return Ok{};
+ }
+ Result<> makeSIMDShift(Index, const std::vector<Annotation>&, SIMDShiftOp) {
+ return Ok{};
+ }
+ Result<> makeSIMDLoad(
+ Index, const std::vector<Annotation>&, SIMDLoadOp, MemoryIdxT*, MemargT) {
+ return Ok{};
+ }
+ Result<> makeSIMDLoadStoreLane(Index,
+ const std::vector<Annotation>&,
+ SIMDLoadStoreLaneOp,
+ MemoryIdxT*,
+ MemargT,
+ uint8_t) {
+ return Ok{};
+ }
+ Result<>
+ makeMemoryInit(Index, const std::vector<Annotation>&, MemoryIdxT*, DataIdxT) {
+ return Ok{};
+ }
+ Result<> makeDataDrop(Index, const std::vector<Annotation>&, DataIdxT) {
return Ok{};
}
- Result<> makeMemoryInit(Index, MemoryIdxT*, DataIdxT) { return Ok{}; }
- Result<> makeDataDrop(Index, DataIdxT) { return Ok{}; }
- Result<> makeMemoryCopy(Index, MemoryIdxT*, MemoryIdxT*) { return Ok{}; }
- Result<> makeMemoryFill(Index, MemoryIdxT*) { return Ok{}; }
- template<typename TypeT> Result<> makePop(Index, TypeT) { return Ok{}; }
- Result<> makeCall(Index, FuncIdxT, bool) { return Ok{}; }
+ Result<> makeMemoryCopy(Index,
+ const std::vector<Annotation>&,
+ MemoryIdxT*,
+ MemoryIdxT*) {
+ return Ok{};
+ }
+ Result<> makeMemoryFill(Index, const std::vector<Annotation>&, MemoryIdxT*) {
+ return Ok{};
+ }
+ template<typename TypeT>
+ Result<> makePop(Index, const std::vector<Annotation>&, TypeT) {
+ return Ok{};
+ }
+ Result<> makeCall(Index, const std::vector<Annotation>&, FuncIdxT, bool) {
+ return Ok{};
+ }
template<typename TypeUseT>
- Result<> makeCallIndirect(Index, TableIdxT*, TypeUseT, bool) {
+ Result<> makeCallIndirect(
+ Index, const std::vector<Annotation>&, TableIdxT*, TypeUseT, bool) {
+ return Ok{};
+ }
+ Result<> makeBreak(Index, const std::vector<Annotation>&, LabelIdxT, bool) {
+ return Ok{};
+ }
+ Result<> makeSwitch(Index,
+ const std::vector<Annotation>&,
+ const std::vector<LabelIdxT>&,
+ LabelIdxT) {
+ return Ok{};
+ }
+ Result<> makeReturn(Index, const std::vector<Annotation>&) { return Ok{}; }
+ template<typename HeapTypeT>
+ Result<> makeRefNull(Index, const std::vector<Annotation>&, HeapTypeT) {
+ return Ok{};
+ }
+ Result<> makeRefIsNull(Index, const std::vector<Annotation>&) { return Ok{}; }
+ Result<> makeRefFunc(Index, const std::vector<Annotation>&, FuncIdxT) {
+ return Ok{};
+ }
+ Result<> makeRefEq(Index, const std::vector<Annotation>&) { return Ok{}; }
+ Result<> makeTableGet(Index, const std::vector<Annotation>&, TableIdxT*) {
+ return Ok{};
+ }
+ Result<> makeTableSet(Index, const std::vector<Annotation>&, TableIdxT*) {
+ return Ok{};
+ }
+ Result<> makeTableSize(Index, const std::vector<Annotation>&, TableIdxT*) {
+ return Ok{};
+ }
+ Result<> makeTableGrow(Index, const std::vector<Annotation>&, TableIdxT*) {
+ return Ok{};
+ }
+ Result<> makeTableFill(Index, const std::vector<Annotation>&, TableIdxT*) {
+ return Ok{};
+ }
+ Result<>
+ makeTableCopy(Index, const std::vector<Annotation>&, TableIdxT*, TableIdxT*) {
+ return Ok{};
+ }
+ Result<> makeThrow(Index, const std::vector<Annotation>&, TagIdxT) {
+ return Ok{};
+ }
+ Result<> makeRethrow(Index, const std::vector<Annotation>&, LabelIdxT) {
+ return Ok{};
+ }
+ Result<> makeThrowRef(Index, const std::vector<Annotation>&) { return Ok{}; }
+ Result<> makeTupleMake(Index, const std::vector<Annotation>&, uint32_t) {
+ return Ok{};
+ }
+ Result<>
+ makeTupleExtract(Index, const std::vector<Annotation>&, uint32_t, uint32_t) {
+ return Ok{};
+ }
+ Result<> makeTupleDrop(Index, const std::vector<Annotation>&, uint32_t) {
return Ok{};
}
- Result<> makeBreak(Index, LabelIdxT, bool) { return Ok{}; }
- Result<> makeSwitch(Index, const std::vector<LabelIdxT>&, LabelIdxT) {
+ template<typename HeapTypeT>
+ Result<> makeCallRef(Index, const std::vector<Annotation>&, HeapTypeT, bool) {
+ return Ok{};
+ }
+ Result<> makeRefI31(Index, const std::vector<Annotation>&) { return Ok{}; }
+ Result<> makeI31Get(Index, const std::vector<Annotation>&, bool) {
return Ok{};
}
- Result<> makeReturn(Index) { return Ok{}; }
- template<typename HeapTypeT> Result<> makeRefNull(Index, HeapTypeT) {
+ template<typename TypeT>
+ Result<> makeRefTest(Index, const std::vector<Annotation>&, TypeT) {
return Ok{};
}
- Result<> makeRefIsNull(Index) { return Ok{}; }
- Result<> makeRefFunc(Index, FuncIdxT) { return Ok{}; }
- Result<> makeRefEq(Index) { return Ok{}; }
- Result<> makeTableGet(Index, TableIdxT*) { return Ok{}; }
- Result<> makeTableSet(Index, TableIdxT*) { return Ok{}; }
- Result<> makeTableSize(Index, TableIdxT*) { return Ok{}; }
- Result<> makeTableGrow(Index, TableIdxT*) { return Ok{}; }
- Result<> makeTableFill(Index, TableIdxT*) { return Ok{}; }
- Result<> makeTableCopy(Index, TableIdxT*, TableIdxT*) { return Ok{}; }
- Result<> makeThrow(Index, TagIdxT) { return Ok{}; }
- Result<> makeRethrow(Index, LabelIdxT) { return Ok{}; }
- Result<> makeThrowRef(Index) { return Ok{}; }
- Result<> makeTupleMake(Index, uint32_t) { return Ok{}; }
- Result<> makeTupleExtract(Index, uint32_t, uint32_t) { return Ok{}; }
- Result<> makeTupleDrop(Index, uint32_t) { return Ok{}; }
- template<typename HeapTypeT> Result<> makeCallRef(Index, HeapTypeT, bool) {
+ template<typename TypeT>
+ Result<> makeRefCast(Index, const std::vector<Annotation>&, TypeT) {
return Ok{};
}
- Result<> makeRefI31(Index) { return Ok{}; }
- Result<> makeI31Get(Index, bool) { return Ok{}; }
- template<typename TypeT> Result<> makeRefTest(Index, TypeT) { return Ok{}; }
- template<typename TypeT> Result<> makeRefCast(Index, TypeT) { return Ok{}; }
- Result<> makeBrOn(Index, LabelIdxT, BrOnOp) { return Ok{}; }
+ Result<> makeBrOn(Index, const std::vector<Annotation>&, LabelIdxT, BrOnOp) {
+ return Ok{};
+ }
template<typename TypeT>
- Result<> makeBrOn(Index, LabelIdxT, BrOnOp, TypeT, TypeT) {
+ Result<> makeBrOn(
+ Index, const std::vector<Annotation>&, LabelIdxT, BrOnOp, TypeT, TypeT) {
return Ok{};
}
- template<typename HeapTypeT> Result<> makeStructNew(Index, HeapTypeT) {
+ template<typename HeapTypeT>
+ Result<> makeStructNew(Index, const std::vector<Annotation>&, HeapTypeT) {
return Ok{};
}
- template<typename HeapTypeT> Result<> makeStructNewDefault(Index, HeapTypeT) {
+ template<typename HeapTypeT>
+ Result<>
+ makeStructNewDefault(Index, const std::vector<Annotation>&, HeapTypeT) {
return Ok{};
}
template<typename HeapTypeT>
- Result<> makeStructGet(Index, HeapTypeT, FieldIdxT, bool) {
+ Result<> makeStructGet(
+ Index, const std::vector<Annotation>&, HeapTypeT, FieldIdxT, bool) {
return Ok{};
}
template<typename HeapTypeT>
- Result<> makeStructSet(Index, HeapTypeT, FieldIdxT) {
+ Result<>
+ makeStructSet(Index, const std::vector<Annotation>&, HeapTypeT, FieldIdxT) {
return Ok{};
}
- template<typename HeapTypeT> Result<> makeArrayNew(Index, HeapTypeT) {
+ template<typename HeapTypeT>
+ Result<> makeArrayNew(Index, const std::vector<Annotation>&, HeapTypeT) {
return Ok{};
}
- template<typename HeapTypeT> Result<> makeArrayNewDefault(Index, HeapTypeT) {
+ template<typename HeapTypeT>
+ Result<>
+ makeArrayNewDefault(Index, const std::vector<Annotation>&, HeapTypeT) {
return Ok{};
}
template<typename HeapTypeT>
- Result<> makeArrayNewData(Index, HeapTypeT, DataIdxT) {
+ Result<>
+ makeArrayNewData(Index, const std::vector<Annotation>&, HeapTypeT, DataIdxT) {
return Ok{};
}
template<typename HeapTypeT>
- Result<> makeArrayNewElem(Index, HeapTypeT, ElemIdxT) {
+ Result<>
+ makeArrayNewElem(Index, const std::vector<Annotation>&, HeapTypeT, ElemIdxT) {
return Ok{};
}
template<typename HeapTypeT>
- Result<> makeArrayNewFixed(Index, HeapTypeT, uint32_t) {
+ Result<> makeArrayNewFixed(Index,
+ const std::vector<Annotation>&,
+ HeapTypeT,
+ uint32_t) {
return Ok{};
}
- template<typename HeapTypeT> Result<> makeArrayGet(Index, HeapTypeT, bool) {
+ template<typename HeapTypeT>
+ Result<>
+ makeArrayGet(Index, const std::vector<Annotation>&, HeapTypeT, bool) {
return Ok{};
}
- template<typename HeapTypeT> Result<> makeArraySet(Index, HeapTypeT) {
+ template<typename HeapTypeT>
+ Result<> makeArraySet(Index, const std::vector<Annotation>&, HeapTypeT) {
return Ok{};
}
- Result<> makeArrayLen(Index) { return Ok{}; }
+ Result<> makeArrayLen(Index, const std::vector<Annotation>&) { return Ok{}; }
template<typename HeapTypeT>
- Result<> makeArrayCopy(Index, HeapTypeT, HeapTypeT) {
+ Result<>
+ makeArrayCopy(Index, const std::vector<Annotation>&, HeapTypeT, HeapTypeT) {
return Ok{};
}
- template<typename HeapTypeT> Result<> makeArrayFill(Index, HeapTypeT) {
+ template<typename HeapTypeT>
+ Result<> makeArrayFill(Index, const std::vector<Annotation>&, HeapTypeT) {
return Ok{};
}
template<typename HeapTypeT>
- Result<> makeArrayInitData(Index, HeapTypeT, DataIdxT) {
+ Result<> makeArrayInitData(Index,
+ const std::vector<Annotation>&,
+ HeapTypeT,
+ DataIdxT) {
return Ok{};
}
template<typename HeapTypeT>
- Result<> makeArrayInitElem(Index, HeapTypeT, ElemIdxT) {
- return Ok{};
- }
- Result<> makeRefAs(Index, RefAsOp) { return Ok{}; }
- Result<> makeStringNew(Index, StringNewOp, bool, MemoryIdxT*) { return Ok{}; }
- Result<> makeStringConst(Index, std::string_view) { return Ok{}; }
- Result<> makeStringMeasure(Index, StringMeasureOp) { return Ok{}; }
- Result<> makeStringEncode(Index, StringEncodeOp, MemoryIdxT*) { return Ok{}; }
- Result<> makeStringConcat(Index) { return Ok{}; }
- Result<> makeStringEq(Index, StringEqOp) { return Ok{}; }
- Result<> makeStringAs(Index, StringAsOp) { return Ok{}; }
- Result<> makeStringWTF8Advance(Index) { return Ok{}; }
- Result<> makeStringWTF16Get(Index) { return Ok{}; }
- Result<> makeStringIterNext(Index) { return Ok{}; }
- Result<> makeStringIterMove(Index, StringIterMoveOp) { return Ok{}; }
- Result<> makeStringSliceWTF(Index, StringSliceWTFOp) { return Ok{}; }
- Result<> makeStringSliceIter(Index) { return Ok{}; }
- template<typename HeapTypeT> Result<> makeContNew(Index, HeapTypeT) {
+ Result<> makeArrayInitElem(Index,
+ const std::vector<Annotation>&,
+ HeapTypeT,
+ ElemIdxT) {
+ return Ok{};
+ }
+ Result<> makeRefAs(Index, const std::vector<Annotation>&, RefAsOp) {
+ return Ok{};
+ }
+ Result<> makeStringNew(
+ Index, const std::vector<Annotation>&, StringNewOp, bool, MemoryIdxT*) {
+ return Ok{};
+ }
+ Result<>
+ makeStringConst(Index, const std::vector<Annotation>&, std::string_view) {
+ return Ok{};
+ }
+ Result<>
+ makeStringMeasure(Index, const std::vector<Annotation>&, StringMeasureOp) {
+ return Ok{};
+ }
+ Result<> makeStringEncode(Index,
+ const std::vector<Annotation>&,
+ StringEncodeOp,
+ MemoryIdxT*) {
+ return Ok{};
+ }
+ Result<> makeStringConcat(Index, const std::vector<Annotation>&) {
+ return Ok{};
+ }
+ Result<> makeStringEq(Index, const std::vector<Annotation>&, StringEqOp) {
+ return Ok{};
+ }
+ Result<> makeStringAs(Index, const std::vector<Annotation>&, StringAsOp) {
+ return Ok{};
+ }
+ Result<> makeStringWTF8Advance(Index, const std::vector<Annotation>&) {
+ return Ok{};
+ }
+ Result<> makeStringWTF16Get(Index, const std::vector<Annotation>&) {
+ return Ok{};
+ }
+ Result<> makeStringIterNext(Index, const std::vector<Annotation>&) {
+ return Ok{};
+ }
+ Result<>
+ makeStringIterMove(Index, const std::vector<Annotation>&, StringIterMoveOp) {
+ return Ok{};
+ }
+ Result<>
+ makeStringSliceWTF(Index, const std::vector<Annotation>&, StringSliceWTFOp) {
+ return Ok{};
+ }
+ Result<> makeStringSliceIter(Index, const std::vector<Annotation>&) {
+ return Ok{};
+ }
+ template<typename HeapTypeT>
+ Result<> makeContNew(Index, const std::vector<Annotation>&, HeapTypeT) {
return Ok{};
}
template<typename HeapTypeT>
- Result<> makeResume(Index, HeapTypeT, const TagLabelListT&) {
+ Result<> makeResume(Index,
+ const std::vector<Annotation>&,
+ HeapTypeT,
+ const TagLabelListT&) {
return Ok{};
}
};
@@ -1113,6 +1354,8 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
typeNames;
const std::unordered_map<Index, Index>& implicitElemIndices;
+ std::unordered_map<std::string_view, Index> debugFileIndices;
+
// The index of the current module element.
Index index = 0;
@@ -1444,7 +1687,51 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return wasm.memories[0]->name;
}
- Result<> makeBlock(Index pos, std::optional<Name> label, HeapType type) {
+ void setSrcLoc(const Annotation& annotation) {
+ assert(annotation.kind == srcAnnotationKind);
+ Lexer lexer(annotation.contents);
+ auto contents = lexer.takeKeyword();
+ if (!contents || !lexer.empty()) {
+ return;
+ }
+
+ auto fileSize = contents->find(':');
+ if (fileSize == contents->npos) {
+ return;
+ }
+ auto file = contents->substr(0, fileSize);
+ contents = contents->substr(fileSize + 1);
+
+ auto lineSize = contents->find(':');
+ if (fileSize == contents->npos) {
+ return;
+ }
+ auto line = Lexer(contents->substr(0, lineSize)).takeU32();
+ if (!line) {
+ return;
+ }
+ contents = contents->substr(lineSize + 1);
+
+ auto col = Lexer(*contents).takeU32();
+ if (!col) {
+ return;
+ }
+
+ // TODO: If we ever parallelize the parse, access to
+ // `wasm.debugInfoFileNames` will have to be protected by a lock.
+ auto [it, inserted] =
+ debugFileIndices.insert({file, debugFileIndices.size()});
+ if (inserted) {
+ assert(wasm.debugInfoFileNames.size() == it->second);
+ wasm.debugInfoFileNames.push_back(std::string(file));
+ }
+ irBuilder.setDebugLocation({it->second, *line, *col});
+ }
+
+ Result<> makeBlock(Index pos,
+ const std::vector<Annotation>& annotations,
+ std::optional<Name> label,
+ HeapType type) {
// TODO: validate labels?
// TODO: Move error on input types to here?
return withLoc(pos,
@@ -1452,7 +1739,10 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
type.getSignature().results));
}
- Result<> makeIf(Index pos, std::optional<Name> label, HeapType type) {
+ Result<> makeIf(Index pos,
+ const std::vector<Annotation>& annotations,
+ std::optional<Name> label,
+ HeapType type) {
// TODO: validate labels?
// TODO: Move error on input types to here?
return withLoc(
@@ -1462,7 +1752,10 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
Result<> visitElse() { return withLoc(irBuilder.visitElse()); }
- Result<> makeLoop(Index pos, std::optional<Name> label, HeapType type) {
+ Result<> makeLoop(Index pos,
+ const std::vector<Annotation>& annotations,
+ std::optional<Name> label,
+ HeapType type) {
// TODO: validate labels?
// TODO: Move error on input types to here?
return withLoc(
@@ -1470,7 +1763,10 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
irBuilder.makeLoop(label ? *label : Name{}, type.getSignature().results));
}
- Result<> makeTry(Index pos, std::optional<Name> label, HeapType type) {
+ Result<> makeTry(Index pos,
+ const std::vector<Annotation>& annotations,
+ std::optional<Name> label,
+ HeapType type) {
// TODO: validate labels?
// TODO: Move error on input types to here?
return withLoc(
@@ -1479,6 +1775,7 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
}
Result<> makeTryTable(Index pos,
+ const std::vector<Annotation>& annotations,
std::optional<Name> label,
HeapType type,
const std::vector<CatchInfo>& info) {
@@ -1512,21 +1809,29 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
Result<> visitEnd() { return withLoc(irBuilder.visitEnd()); }
- Result<> makeUnreachable(Index pos) {
+ Result<> makeUnreachable(Index pos,
+ const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeUnreachable());
}
- Result<> makeNop(Index pos) { return withLoc(pos, irBuilder.makeNop()); }
+ Result<> makeNop(Index pos, const std::vector<Annotation>& annotations) {
+ return withLoc(pos, irBuilder.makeNop());
+ }
- Result<> makeBinary(Index pos, BinaryOp op) {
+ Result<> makeBinary(Index pos,
+ const std::vector<Annotation>& annotations,
+ BinaryOp op) {
return withLoc(pos, irBuilder.makeBinary(op));
}
- Result<> makeUnary(Index pos, UnaryOp op) {
+ Result<>
+ makeUnary(Index pos, const std::vector<Annotation>& annotations, UnaryOp op) {
return withLoc(pos, irBuilder.makeUnary(op));
}
- Result<> makeSelect(Index pos, std::vector<Type>* res) {
+ Result<> makeSelect(Index pos,
+ const std::vector<Annotation>& annotations,
+ std::vector<Type>* res) {
if (res && res->size()) {
if (res->size() > 1) {
return in.err(pos, "select may not have more than one result type");
@@ -1536,58 +1841,83 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return withLoc(pos, irBuilder.makeSelect());
}
- Result<> makeDrop(Index pos) { return withLoc(pos, irBuilder.makeDrop()); }
+ Result<> makeDrop(Index pos, const std::vector<Annotation>& annotations) {
+ return withLoc(pos, irBuilder.makeDrop());
+ }
- Result<> makeMemorySize(Index pos, Name* mem) {
+ Result<> makeMemorySize(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* mem) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos, irBuilder.makeMemorySize(*m));
}
- Result<> makeMemoryGrow(Index pos, Name* mem) {
+ Result<> makeMemoryGrow(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* mem) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos, irBuilder.makeMemoryGrow(*m));
}
- Result<> makeLocalGet(Index pos, Index local) {
+ Result<> makeLocalGet(Index pos,
+ const std::vector<Annotation>& annotations,
+ Index local) {
return withLoc(pos, irBuilder.makeLocalGet(local));
}
- Result<> makeLocalTee(Index pos, Index local) {
+ Result<> makeLocalTee(Index pos,
+ const std::vector<Annotation>& annotations,
+ Index local) {
return withLoc(pos, irBuilder.makeLocalTee(local));
}
- Result<> makeLocalSet(Index pos, Index local) {
+ Result<> makeLocalSet(Index pos,
+ const std::vector<Annotation>& annotations,
+ Index local) {
return withLoc(pos, irBuilder.makeLocalSet(local));
}
- Result<> makeGlobalGet(Index pos, Name global) {
+ Result<> makeGlobalGet(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name global) {
return withLoc(pos, irBuilder.makeGlobalGet(global));
}
- Result<> makeGlobalSet(Index pos, Name global) {
+ Result<> makeGlobalSet(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name global) {
assert(wasm.getGlobalOrNull(global));
return withLoc(pos, irBuilder.makeGlobalSet(global));
}
- Result<> makeI32Const(Index pos, uint32_t c) {
+ Result<> makeI32Const(Index pos,
+ const std::vector<Annotation>& annotations,
+ uint32_t c) {
return withLoc(pos, irBuilder.makeConst(Literal(c)));
}
- Result<> makeI64Const(Index pos, uint64_t c) {
+ Result<> makeI64Const(Index pos,
+ const std::vector<Annotation>& annotations,
+ uint64_t c) {
return withLoc(pos, irBuilder.makeConst(Literal(c)));
}
- Result<> makeF32Const(Index pos, float c) {
+ Result<>
+ makeF32Const(Index pos, const std::vector<Annotation>& annotations, float c) {
return withLoc(pos, irBuilder.makeConst(Literal(c)));
}
- Result<> makeF64Const(Index pos, double c) {
+ Result<> makeF64Const(Index pos,
+ const std::vector<Annotation>& annotations,
+ double c) {
return withLoc(pos, irBuilder.makeConst(Literal(c)));
}
- Result<> makeI8x16Const(Index pos, const std::array<uint8_t, 16>& vals) {
+ Result<> makeI8x16Const(Index pos,
+ const std::vector<Annotation>& annotations,
+ const std::array<uint8_t, 16>& vals) {
std::array<Literal, 16> lanes;
for (size_t i = 0; i < 16; ++i) {
lanes[i] = Literal(uint32_t(vals[i]));
@@ -1595,7 +1925,9 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return withLoc(pos, irBuilder.makeConst(Literal(lanes)));
}
- Result<> makeI16x8Const(Index pos, const std::array<uint16_t, 8>& vals) {
+ Result<> makeI16x8Const(Index pos,
+ const std::vector<Annotation>& annotations,
+ const std::array<uint16_t, 8>& vals) {
std::array<Literal, 8> lanes;
for (size_t i = 0; i < 8; ++i) {
lanes[i] = Literal(uint32_t(vals[i]));
@@ -1603,7 +1935,9 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return withLoc(pos, irBuilder.makeConst(Literal(lanes)));
}
- Result<> makeI32x4Const(Index pos, const std::array<uint32_t, 4>& vals) {
+ Result<> makeI32x4Const(Index pos,
+ const std::vector<Annotation>& annotations,
+ const std::array<uint32_t, 4>& vals) {
std::array<Literal, 4> lanes;
for (size_t i = 0; i < 4; ++i) {
lanes[i] = Literal(vals[i]);
@@ -1611,7 +1945,9 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return withLoc(pos, irBuilder.makeConst(Literal(lanes)));
}
- Result<> makeI64x2Const(Index pos, const std::array<uint64_t, 2>& vals) {
+ Result<> makeI64x2Const(Index pos,
+ const std::vector<Annotation>& annotations,
+ const std::array<uint64_t, 2>& vals) {
std::array<Literal, 2> lanes;
for (size_t i = 0; i < 2; ++i) {
lanes[i] = Literal(vals[i]);
@@ -1619,7 +1955,9 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return withLoc(pos, irBuilder.makeConst(Literal(lanes)));
}
- Result<> makeF32x4Const(Index pos, const std::array<float, 4>& vals) {
+ Result<> makeF32x4Const(Index pos,
+ const std::vector<Annotation>& annotations,
+ const std::array<float, 4>& vals) {
std::array<Literal, 4> lanes;
for (size_t i = 0; i < 4; ++i) {
lanes[i] = Literal(vals[i]);
@@ -1627,7 +1965,9 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return withLoc(pos, irBuilder.makeConst(Literal(lanes)));
}
- Result<> makeF64x2Const(Index pos, const std::array<double, 2>& vals) {
+ Result<> makeF64x2Const(Index pos,
+ const std::vector<Annotation>& annotations,
+ const std::array<double, 2>& vals) {
std::array<Literal, 2> lanes;
for (size_t i = 0; i < 2; ++i) {
lanes[i] = Literal(vals[i]);
@@ -1636,6 +1976,7 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
}
Result<> makeLoad(Index pos,
+ const std::vector<Annotation>& annotations,
Type type,
bool signed_,
int bytes,
@@ -1653,8 +1994,13 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
bytes, signed_, memarg.offset, memarg.align, type, *m));
}
- Result<> makeStore(
- Index pos, Type type, int bytes, bool isAtomic, Name* mem, Memarg memarg) {
+ Result<> makeStore(Index pos,
+ const std::vector<Annotation>& annotations,
+ Type type,
+ int bytes,
+ bool isAtomic,
+ Name* mem,
+ Memarg memarg) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
if (isAtomic) {
@@ -1665,67 +2011,104 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
pos, irBuilder.makeStore(bytes, memarg.offset, memarg.align, type, *m));
}
- Result<> makeAtomicRMW(
- Index pos, AtomicRMWOp op, Type type, int bytes, Name* mem, Memarg memarg) {
+ Result<> makeAtomicRMW(Index pos,
+ const std::vector<Annotation>& annotations,
+ AtomicRMWOp op,
+ Type type,
+ int bytes,
+ Name* mem,
+ Memarg memarg) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos,
irBuilder.makeAtomicRMW(op, bytes, memarg.offset, type, *m));
}
- Result<>
- makeAtomicCmpxchg(Index pos, Type type, int bytes, Name* mem, Memarg memarg) {
+ Result<> makeAtomicCmpxchg(Index pos,
+ const std::vector<Annotation>& annotations,
+ Type type,
+ int bytes,
+ Name* mem,
+ Memarg memarg) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos,
irBuilder.makeAtomicCmpxchg(bytes, memarg.offset, type, *m));
}
- Result<> makeAtomicWait(Index pos, Type type, Name* mem, Memarg memarg) {
+ Result<> makeAtomicWait(Index pos,
+ const std::vector<Annotation>& annotations,
+ Type type,
+ Name* mem,
+ Memarg memarg) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos, irBuilder.makeAtomicWait(type, memarg.offset, *m));
}
- Result<> makeAtomicNotify(Index pos, Name* mem, Memarg memarg) {
+ Result<> makeAtomicNotify(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* mem,
+ Memarg memarg) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos, irBuilder.makeAtomicNotify(memarg.offset, *m));
}
- Result<> makeAtomicFence(Index pos) {
+ Result<> makeAtomicFence(Index pos,
+ const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeAtomicFence());
}
- Result<> makeSIMDExtract(Index pos, SIMDExtractOp op, uint8_t lane) {
+ Result<> makeSIMDExtract(Index pos,
+ const std::vector<Annotation>& annotations,
+ SIMDExtractOp op,
+ uint8_t lane) {
return withLoc(pos, irBuilder.makeSIMDExtract(op, lane));
}
- Result<> makeSIMDReplace(Index pos, SIMDReplaceOp op, uint8_t lane) {
+ Result<> makeSIMDReplace(Index pos,
+ const std::vector<Annotation>& annotations,
+ SIMDReplaceOp op,
+ uint8_t lane) {
return withLoc(pos, irBuilder.makeSIMDReplace(op, lane));
}
- Result<> makeSIMDShuffle(Index pos, const std::array<uint8_t, 16>& lanes) {
+ Result<> makeSIMDShuffle(Index pos,
+ const std::vector<Annotation>& annotations,
+ const std::array<uint8_t, 16>& lanes) {
return withLoc(pos, irBuilder.makeSIMDShuffle(lanes));
}
- Result<> makeSIMDTernary(Index pos, SIMDTernaryOp op) {
+ Result<> makeSIMDTernary(Index pos,
+ const std::vector<Annotation>& annotations,
+ SIMDTernaryOp op) {
return withLoc(pos, irBuilder.makeSIMDTernary(op));
}
- Result<> makeSIMDShift(Index pos, SIMDShiftOp op) {
+ Result<> makeSIMDShift(Index pos,
+ const std::vector<Annotation>& annotations,
+ SIMDShiftOp op) {
return withLoc(pos, irBuilder.makeSIMDShift(op));
}
- Result<> makeSIMDLoad(Index pos, SIMDLoadOp op, Name* mem, Memarg memarg) {
+ Result<> makeSIMDLoad(Index pos,
+ const std::vector<Annotation>& annotations,
+ SIMDLoadOp op,
+ Name* mem,
+ Memarg memarg) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos,
irBuilder.makeSIMDLoad(op, memarg.offset, memarg.align, *m));
}
- Result<> makeSIMDLoadStoreLane(
- Index pos, SIMDLoadStoreLaneOp op, Name* mem, Memarg memarg, uint8_t lane) {
+ Result<> makeSIMDLoadStoreLane(Index pos,
+ const std::vector<Annotation>& annotations,
+ SIMDLoadStoreLaneOp op,
+ Name* mem,
+ Memarg memarg,
+ uint8_t lane) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos,
@@ -1733,17 +2116,25 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
op, memarg.offset, memarg.align, lane, *m));
}
- Result<> makeMemoryInit(Index pos, Name* mem, Name data) {
+ Result<> makeMemoryInit(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* mem,
+ Name data) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos, irBuilder.makeMemoryInit(data, *m));
}
- Result<> makeDataDrop(Index pos, Name data) {
+ Result<> makeDataDrop(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name data) {
return withLoc(pos, irBuilder.makeDataDrop(data));
}
- Result<> makeMemoryCopy(Index pos, Name* destMem, Name* srcMem) {
+ Result<> makeMemoryCopy(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* destMem,
+ Name* srcMem) {
auto destMemory = getMemory(pos, destMem);
CHECK_ERR(destMemory);
auto srcMemory = getMemory(pos, srcMem);
@@ -1751,85 +2142,119 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return withLoc(pos, irBuilder.makeMemoryCopy(*destMemory, *srcMemory));
}
- Result<> makeMemoryFill(Index pos, Name* mem) {
+ Result<> makeMemoryFill(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* mem) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos, irBuilder.makeMemoryFill(*m));
}
- Result<> makePop(Index pos, Type type) {
+ Result<>
+ makePop(Index pos, const std::vector<Annotation>& annotations, Type type) {
return withLoc(pos, irBuilder.makePop(type));
}
- Result<> makeCall(Index pos, Name func, bool isReturn) {
+ Result<> makeCall(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name func,
+ bool isReturn) {
return withLoc(pos, irBuilder.makeCall(func, isReturn));
}
- Result<>
- makeCallIndirect(Index pos, Name* table, HeapType type, bool isReturn) {
+ Result<> makeCallIndirect(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* table,
+ HeapType type,
+ bool isReturn) {
auto t = getTable(pos, table);
CHECK_ERR(t);
return withLoc(pos, irBuilder.makeCallIndirect(*t, type, isReturn));
}
- Result<> makeBreak(Index pos, Index label, bool isConditional) {
+ Result<> makeBreak(Index pos,
+ const std::vector<Annotation>& annotations,
+ Index label,
+ bool isConditional) {
return withLoc(pos, irBuilder.makeBreak(label, isConditional));
}
- Result<>
- makeSwitch(Index pos, const std::vector<Index> labels, Index defaultLabel) {
+ Result<> makeSwitch(Index pos,
+ const std::vector<Annotation>& annotations,
+ const std::vector<Index> labels,
+ Index defaultLabel) {
return withLoc(pos, irBuilder.makeSwitch(labels, defaultLabel));
}
- Result<> makeReturn(Index pos) {
+ Result<> makeReturn(Index pos, const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeReturn());
}
- Result<> makeRefNull(Index pos, HeapType type) {
+ Result<> makeRefNull(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type) {
return withLoc(pos, irBuilder.makeRefNull(type));
}
- Result<> makeRefIsNull(Index pos) {
+ Result<> makeRefIsNull(Index pos,
+ const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeRefIsNull());
}
- Result<> makeRefFunc(Index pos, Name func) {
+ Result<> makeRefFunc(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name func) {
return withLoc(pos, irBuilder.makeRefFunc(func));
}
- Result<> makeRefEq(Index pos) { return withLoc(pos, irBuilder.makeRefEq()); }
+ Result<> makeRefEq(Index pos, const std::vector<Annotation>& annotations) {
+ return withLoc(pos, irBuilder.makeRefEq());
+ }
- Result<> makeTableGet(Index pos, Name* table) {
+ Result<> makeTableGet(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* table) {
auto t = getTable(pos, table);
CHECK_ERR(t);
return withLoc(pos, irBuilder.makeTableGet(*t));
}
- Result<> makeTableSet(Index pos, Name* table) {
+ Result<> makeTableSet(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* table) {
auto t = getTable(pos, table);
CHECK_ERR(t);
return withLoc(pos, irBuilder.makeTableSet(*t));
}
- Result<> makeTableSize(Index pos, Name* table) {
+ Result<> makeTableSize(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* table) {
auto t = getTable(pos, table);
CHECK_ERR(t);
return withLoc(pos, irBuilder.makeTableSize(*t));
}
- Result<> makeTableGrow(Index pos, Name* table) {
+ Result<> makeTableGrow(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* table) {
auto t = getTable(pos, table);
CHECK_ERR(t);
return withLoc(pos, irBuilder.makeTableGrow(*t));
}
- Result<> makeTableFill(Index pos, Name* table) {
+ Result<> makeTableFill(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* table) {
auto t = getTable(pos, table);
CHECK_ERR(t);
return withLoc(pos, irBuilder.makeTableFill(*t));
}
- Result<> makeTableCopy(Index pos, Name* destTable, Name* srcTable) {
+ Result<> makeTableCopy(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* destTable,
+ Name* srcTable) {
auto dest = getTable(pos, destTable);
CHECK_ERR(dest);
auto src = getTable(pos, srcTable);
@@ -1837,51 +2262,71 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return withLoc(pos, irBuilder.makeTableCopy(*dest, *src));
}
- Result<> makeThrow(Index pos, Name tag) {
+ Result<>
+ makeThrow(Index pos, const std::vector<Annotation>& annotations, Name tag) {
return withLoc(pos, irBuilder.makeThrow(tag));
}
- Result<> makeRethrow(Index pos, Index label) {
+ Result<> makeRethrow(Index pos,
+ const std::vector<Annotation>& annotations,
+ Index label) {
return withLoc(pos, irBuilder.makeRethrow(label));
}
- Result<> makeThrowRef(Index pos) {
+ Result<> makeThrowRef(Index pos, const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeThrowRef());
}
- Result<> makeTupleMake(Index pos, uint32_t arity) {
+ Result<> makeTupleMake(Index pos,
+ const std::vector<Annotation>& annotations,
+ uint32_t arity) {
return withLoc(pos, irBuilder.makeTupleMake(arity));
}
- Result<> makeTupleExtract(Index pos, uint32_t arity, uint32_t index) {
+ Result<> makeTupleExtract(Index pos,
+ const std::vector<Annotation>& annotations,
+ uint32_t arity,
+ uint32_t index) {
return withLoc(pos, irBuilder.makeTupleExtract(arity, index));
}
- Result<> makeTupleDrop(Index pos, uint32_t arity) {
+ Result<> makeTupleDrop(Index pos,
+ const std::vector<Annotation>& annotations,
+ uint32_t arity) {
return withLoc(pos, irBuilder.makeTupleDrop(arity));
}
- Result<> makeCallRef(Index pos, HeapType type, bool isReturn) {
+ Result<> makeCallRef(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ bool isReturn) {
return withLoc(pos, irBuilder.makeCallRef(type, isReturn));
}
- Result<> makeRefI31(Index pos) {
+ Result<> makeRefI31(Index pos, const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeRefI31());
}
- Result<> makeI31Get(Index pos, bool signed_) {
+ Result<> makeI31Get(Index pos,
+ const std::vector<Annotation>& annotations,
+ bool signed_) {
return withLoc(pos, irBuilder.makeI31Get(signed_));
}
- Result<> makeRefTest(Index pos, Type type) {
+ Result<> makeRefTest(Index pos,
+ const std::vector<Annotation>& annotations,
+ Type type) {
return withLoc(pos, irBuilder.makeRefTest(type));
}
- Result<> makeRefCast(Index pos, Type type) {
+ Result<> makeRefCast(Index pos,
+ const std::vector<Annotation>& annotations,
+ Type type) {
return withLoc(pos, irBuilder.makeRefCast(type));
}
Result<> makeBrOn(Index pos,
+ const std::vector<Annotation>& annotations,
Index label,
BrOnOp op,
Type in = Type::none,
@@ -1889,136 +2334,205 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return withLoc(pos, irBuilder.makeBrOn(label, op, in, out));
}
- Result<> makeStructNew(Index pos, HeapType type) {
+ Result<> makeStructNew(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type) {
return withLoc(pos, irBuilder.makeStructNew(type));
}
- Result<> makeStructNewDefault(Index pos, HeapType type) {
+ Result<> makeStructNewDefault(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type) {
return withLoc(pos, irBuilder.makeStructNewDefault(type));
}
- Result<> makeStructGet(Index pos, HeapType type, Index field, bool signed_) {
+ Result<> makeStructGet(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ Index field,
+ bool signed_) {
return withLoc(pos, irBuilder.makeStructGet(type, field, signed_));
}
- Result<> makeStructSet(Index pos, HeapType type, Index field) {
+ Result<> makeStructSet(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ Index field) {
return withLoc(pos, irBuilder.makeStructSet(type, field));
}
- Result<> makeArrayNew(Index pos, HeapType type) {
+ Result<> makeArrayNew(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type) {
return withLoc(pos, irBuilder.makeArrayNew(type));
}
- Result<> makeArrayNewDefault(Index pos, HeapType type) {
+ Result<> makeArrayNewDefault(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type) {
return withLoc(pos, irBuilder.makeArrayNewDefault(type));
}
- Result<> makeArrayNewData(Index pos, HeapType type, Name data) {
+ Result<> makeArrayNewData(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ Name data) {
return withLoc(pos, irBuilder.makeArrayNewData(type, data));
}
- Result<> makeArrayNewElem(Index pos, HeapType type, Name elem) {
+ Result<> makeArrayNewElem(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ Name elem) {
return withLoc(pos, irBuilder.makeArrayNewElem(type, elem));
}
- Result<> makeArrayNewFixed(Index pos, HeapType type, uint32_t arity) {
+ Result<> makeArrayNewFixed(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ uint32_t arity) {
return withLoc(pos, irBuilder.makeArrayNewFixed(type, arity));
}
- Result<> makeArrayGet(Index pos, HeapType type, bool signed_) {
+ Result<> makeArrayGet(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ bool signed_) {
return withLoc(pos, irBuilder.makeArrayGet(type, signed_));
}
- Result<> makeArraySet(Index pos, HeapType type) {
+ Result<> makeArraySet(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type) {
return withLoc(pos, irBuilder.makeArraySet(type));
}
- Result<> makeArrayLen(Index pos) {
+ Result<> makeArrayLen(Index pos, const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeArrayLen());
}
- Result<> makeArrayCopy(Index pos, HeapType destType, HeapType srcType) {
+ Result<> makeArrayCopy(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType destType,
+ HeapType srcType) {
return withLoc(pos, irBuilder.makeArrayCopy(destType, srcType));
}
- Result<> makeArrayFill(Index pos, HeapType type) {
+ Result<> makeArrayFill(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type) {
return withLoc(pos, irBuilder.makeArrayFill(type));
}
- Result<> makeArrayInitData(Index pos, HeapType type, Name data) {
+ Result<> makeArrayInitData(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ Name data) {
return withLoc(pos, irBuilder.makeArrayInitData(type, data));
}
- Result<> makeArrayInitElem(Index pos, HeapType type, Name elem) {
+ Result<> makeArrayInitElem(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ Name elem) {
return withLoc(pos, irBuilder.makeArrayInitElem(type, elem));
}
- Result<> makeRefAs(Index pos, RefAsOp op) {
+ Result<>
+ makeRefAs(Index pos, const std::vector<Annotation>& annotations, RefAsOp op) {
return withLoc(pos, irBuilder.makeRefAs(op));
}
- Result<> makeStringNew(Index pos, StringNewOp op, bool try_, Name* mem) {
+ Result<> makeStringNew(Index pos,
+ const std::vector<Annotation>& annotations,
+ StringNewOp op,
+ bool try_,
+ Name* mem) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos, irBuilder.makeStringNew(op, try_, *m));
}
- Result<> makeStringConst(Index pos, std::string_view str) {
+ Result<> makeStringConst(Index pos,
+ const std::vector<Annotation>& annotations,
+ std::string_view str) {
return withLoc(pos, irBuilder.makeStringConst(Name(str)));
}
- Result<> makeStringMeasure(Index pos, StringMeasureOp op) {
+ Result<> makeStringMeasure(Index pos,
+ const std::vector<Annotation>& annotations,
+ StringMeasureOp op) {
return withLoc(pos, irBuilder.makeStringMeasure(op));
}
- Result<> makeStringEncode(Index pos, StringEncodeOp op, Name* mem) {
+ Result<> makeStringEncode(Index pos,
+ const std::vector<Annotation>& annotations,
+ StringEncodeOp op,
+ Name* mem) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos, irBuilder.makeStringEncode(op, *m));
}
- Result<> makeStringConcat(Index pos) {
+ Result<> makeStringConcat(Index pos,
+ const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeStringConcat());
}
- Result<> makeStringEq(Index pos, StringEqOp op) {
+ Result<> makeStringEq(Index pos,
+ const std::vector<Annotation>& annotations,
+ StringEqOp op) {
return withLoc(pos, irBuilder.makeStringEq(op));
}
- Result<> makeStringAs(Index pos, StringAsOp op) {
+ Result<> makeStringAs(Index pos,
+ const std::vector<Annotation>& annotations,
+ StringAsOp op) {
return withLoc(pos, irBuilder.makeStringAs(op));
}
- Result<> makeStringWTF8Advance(Index pos) {
+ Result<> makeStringWTF8Advance(Index pos,
+ const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeStringWTF8Advance());
}
- Result<> makeStringWTF16Get(Index pos) {
+ Result<> makeStringWTF16Get(Index pos,
+ const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeStringWTF16Get());
}
- Result<> makeStringIterNext(Index pos) {
+ Result<> makeStringIterNext(Index pos,
+ const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeStringIterNext());
}
- Result<> makeStringIterMove(Index pos, StringIterMoveOp op) {
+ Result<> makeStringIterMove(Index pos,
+ const std::vector<Annotation>& annotations,
+ StringIterMoveOp op) {
return withLoc(pos, irBuilder.makeStringIterMove(op));
}
- Result<> makeStringSliceWTF(Index pos, StringSliceWTFOp op) {
+ Result<> makeStringSliceWTF(Index pos,
+ const std::vector<Annotation>& annotations,
+ StringSliceWTFOp op) {
return withLoc(pos, irBuilder.makeStringSliceWTF(op));
}
- Result<> makeStringSliceIter(Index pos) {
+ Result<> makeStringSliceIter(Index pos,
+ const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeStringSliceIter());
}
- Result<> makeContNew(Index pos, HeapType type) {
+ Result<> makeContNew(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type) {
return withLoc(pos, irBuilder.makeContNew(type));
}
- Result<>
- makeResume(Index pos, HeapType type, const TagLabelListT& tagLabels) {
+ Result<> makeResume(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ const TagLabelListT& tagLabels) {
std::vector<Name> tags;
std::vector<Index> labels;
tags.reserve(tagLabels.size());
diff --git a/src/parser/lexer.cpp b/src/parser/lexer.cpp
index 07931d69b..8c7542dd7 100644
--- a/src/parser/lexer.cpp
+++ b/src/parser/lexer.cpp
@@ -28,6 +28,8 @@ using namespace std::string_view_literals;
namespace wasm::WATParser {
+Name srcAnnotationKind("src");
+
namespace {
// ================
@@ -348,6 +350,47 @@ struct LexIdCtx : LexCtx {
}
};
+struct LexAnnotationResult : LexResult {
+ Annotation annotation;
+};
+
+struct LexAnnotationCtx : LexCtx {
+ std::string_view kind;
+ size_t kindSize = 0;
+ std::string_view contents;
+ size_t contentsSize = 0;
+
+ explicit LexAnnotationCtx(std::string_view in) : LexCtx(in) {}
+
+ void startKind() { kind = next(); }
+
+ void takeKind(size_t size) {
+ kindSize += size;
+ take(size);
+ }
+
+ void setKind(std::string_view kind) {
+ this->kind = kind;
+ kindSize = kind.size();
+ }
+
+ void startContents() { contents = next(); }
+
+ void takeContents(size_t size) {
+ contentsSize += size;
+ take(size);
+ }
+
+ std::optional<LexAnnotationResult> lexed() {
+ if (auto basic = LexCtx::lexed()) {
+ return LexAnnotationResult{
+ *basic,
+ {Name(kind.substr(0, kindSize)), contents.substr(0, contentsSize)}};
+ }
+ return std::nullopt;
+ }
+};
+
std::optional<LexResult> lparen(std::string_view in) {
LexCtx ctx(in);
ctx.takePrefix("("sv);
@@ -360,6 +403,101 @@ std::optional<LexResult> rparen(std::string_view in) {
return ctx.lexed();
}
+std::optional<LexResult> idchar(std::string_view);
+std::optional<LexResult> space(std::string_view);
+std::optional<LexResult> keyword(std::string_view);
+std::optional<LexIntResult> integer(std::string_view);
+std::optional<LexFloatResult> float_(std::string_view);
+std::optional<LexStrResult> str(std::string_view);
+std::optional<LexIdResult> ident(std::string_view);
+
+// annotation ::= ';;@' [^\n]* | '(@'idchar+ annotelem* ')'
+// annotelem ::= keyword | reserved | uN | sN | fN | string | id
+// | '(' annotelem* ')' | '(@'idchar+ annotelem* ')'
+std::optional<LexAnnotationResult> annotation(std::string_view in) {
+ LexAnnotationCtx ctx(in);
+ if (ctx.takePrefix(";;@"sv)) {
+ ctx.setKind(srcAnnotationKind.str);
+ ctx.startContents();
+ if (auto size = ctx.next().find('\n'); size != ""sv.npos) {
+ ctx.takeContents(size);
+ } else {
+ ctx.takeContents(ctx.next().size());
+ }
+ } else if (ctx.takePrefix("(@"sv)) {
+ ctx.startKind();
+ bool hasIdchar = false;
+ while (auto lexed = idchar(ctx.next())) {
+ ctx.takeKind(1);
+ hasIdchar = true;
+ }
+ if (!hasIdchar) {
+ return std::nullopt;
+ }
+ ctx.startContents();
+ size_t depth = 1;
+ while (true) {
+ if (ctx.empty()) {
+ return std::nullopt;
+ }
+ if (auto lexed = space(ctx.next())) {
+ ctx.takeContents(lexed->span.size());
+ continue;
+ }
+ if (auto lexed = keyword(ctx.next())) {
+ ctx.takeContents(lexed->span.size());
+ continue;
+ }
+ if (auto lexed = integer(ctx.next())) {
+ ctx.takeContents(lexed->span.size());
+ continue;
+ }
+ if (auto lexed = float_(ctx.next())) {
+ ctx.takeContents(lexed->span.size());
+ continue;
+ }
+ if (auto lexed = str(ctx.next())) {
+ ctx.takeContents(lexed->span.size());
+ continue;
+ }
+ if (auto lexed = ident(ctx.next())) {
+ ctx.takeContents(lexed->span.size());
+ continue;
+ }
+ if (ctx.startsWith("(@"sv)) {
+ ctx.takeContents(2);
+ bool hasIdchar = false;
+ while (auto lexed = idchar(ctx.next())) {
+ ctx.takeContents(1);
+ hasIdchar = true;
+ }
+ if (!hasIdchar) {
+ return std::nullopt;
+ }
+ ++depth;
+ continue;
+ }
+ if (ctx.startsWith("("sv)) {
+ ctx.takeContents(1);
+ ++depth;
+ continue;
+ }
+ if (ctx.startsWith(")"sv)) {
+ --depth;
+ if (depth == 0) {
+ ctx.take(1);
+ break;
+ }
+ ctx.takeContents(1);
+ continue;
+ }
+ // Unrecognized token.
+ return std::nullopt;
+ }
+ }
+ return ctx.lexed();
+}
+
// comment ::= linecomment | blockcomment
// linecomment ::= ';;' linechar* ('\n' | eof)
// linechar ::= c:char (if c != '\n')
@@ -375,7 +513,7 @@ std::optional<LexResult> comment(std::string_view in) {
}
// Line comment
- if (ctx.takePrefix(";;"sv)) {
+ if (!ctx.startsWith(";;@"sv) && ctx.takePrefix(";;"sv)) {
if (auto size = ctx.next().find('\n'); size != ""sv.npos) {
ctx.take(size);
} else {
@@ -934,8 +1072,17 @@ std::optional<std::string_view> Token::getID() const {
}
void Lexer::skipSpace() {
- if (auto ctx = space(next())) {
- index += ctx->span.size();
+ while (true) {
+ if (auto ctx = annotation(next())) {
+ index += ctx->span.size();
+ annotations.push_back(ctx->annotation);
+ continue;
+ }
+ if (auto ctx = space(next())) {
+ index += ctx->span.size();
+ continue;
+ }
+ break;
}
}
diff --git a/src/parser/lexer.h b/src/parser/lexer.h
index aab074e6c..1a93d3e99 100644
--- a/src/parser/lexer.h
+++ b/src/parser/lexer.h
@@ -140,25 +140,29 @@ struct Token {
friend std::ostream& operator<<(std::ostream& os, const Token&);
};
+// ===========
+// Annotations
+// ===========
+
+struct Annotation {
+ Name kind;
+ std::string_view contents;
+};
+
+extern Name srcAnnotationKind;
+
// =====
// Lexer
// =====
-// Lexer's purpose is twofold. First, it wraps a buffer to provide a tokenizing
-// iterator over it. Second, it implements that iterator itself. Also provides
-// utilities for locating the text position of tokens within the buffer. Text
-// positions are computed on demand rather than eagerly because they are
-// typically only needed when there is an error to report.
struct Lexer {
private:
std::string_view buffer;
size_t index = 0;
std::optional<Token> curr;
+ std::vector<Annotation> annotations;
public:
- // The end sentinel.
- Lexer() = default;
-
Lexer(std::string_view buffer) : buffer(buffer) { setIndex(0); }
size_t getIndex() const { return index; }
@@ -382,6 +386,7 @@ public:
std::string_view next() const { return buffer.substr(index); }
void advance() {
+ annotations.clear();
skipSpace();
lexToken();
}
@@ -410,6 +415,13 @@ public:
[[nodiscard]] Err err(std::string reason) { return err(getPos(), reason); }
+ const std::vector<Annotation> getAnnotations() { return annotations; }
+ std::vector<Annotation> takeAnnotations() { return std::move(annotations); }
+
+ void setAnnotations(std::vector<Annotation>&& annotations) {
+ this->annotations = std::move(annotations);
+ }
+
private:
void skipSpace();
void lexToken();
diff --git a/src/parser/parsers.h b/src/parser/parsers.h
index 007f815ac..987f0f5aa 100644
--- a/src/parser/parsers.h
+++ b/src/parser/parsers.h
@@ -46,10 +46,14 @@ template<typename Ctx> Result<typename Ctx::GlobalTypeT> globaltype(Ctx&);
template<typename Ctx> Result<uint32_t> tupleArity(Ctx&);
// Instructions
-template<typename Ctx> MaybeResult<> foldedBlockinstr(Ctx&);
-template<typename Ctx> MaybeResult<> unfoldedBlockinstr(Ctx&);
-template<typename Ctx> MaybeResult<> blockinstr(Ctx&);
-template<typename Ctx> MaybeResult<> plaininstr(Ctx&);
+template<typename Ctx>
+MaybeResult<> foldedBlockinstr(Ctx&, const std::vector<Annotation>&);
+template<typename Ctx>
+MaybeResult<> unfoldedBlockinstr(Ctx&, const std::vector<Annotation>&);
+template<typename Ctx>
+MaybeResult<> blockinstr(Ctx&, const std::vector<Annotation>&);
+template<typename Ctx>
+MaybeResult<> plaininstr(Ctx&, const std::vector<Annotation>&);
template<typename Ctx> MaybeResult<> instr(Ctx&);
template<typename Ctx> MaybeResult<> foldedinstr(Ctx&);
template<typename Ctx> Result<> instrs(Ctx&);
@@ -57,118 +61,250 @@ template<typename Ctx> Result<> foldedinstrs(Ctx&);
template<typename Ctx> Result<typename Ctx::ExprT> expr(Ctx&);
template<typename Ctx> Result<typename Ctx::MemargT> memarg(Ctx&, uint32_t);
template<typename Ctx> Result<typename Ctx::BlockTypeT> blocktype(Ctx&);
-template<typename Ctx> MaybeResult<> block(Ctx&, bool);
-template<typename Ctx> MaybeResult<> ifelse(Ctx&, bool);
-template<typename Ctx> MaybeResult<> loop(Ctx&, bool);
-template<typename Ctx> MaybeResult<> trycatch(Ctx&, bool);
+template<typename Ctx>
+MaybeResult<> block(Ctx&, const std::vector<Annotation>&, bool);
+template<typename Ctx>
+MaybeResult<> ifelse(Ctx&, const std::vector<Annotation>&, bool);
+template<typename Ctx>
+MaybeResult<> loop(Ctx&, const std::vector<Annotation>&, bool);
+template<typename Ctx>
+MaybeResult<> trycatch(Ctx&, const std::vector<Annotation>&, bool);
template<typename Ctx> MaybeResult<typename Ctx::CatchT> catchinstr(Ctx&);
-template<typename Ctx> MaybeResult<> trytable(Ctx&, bool);
-template<typename Ctx> Result<> makeUnreachable(Ctx&, Index);
-template<typename Ctx> Result<> makeNop(Ctx&, Index);
-template<typename Ctx> Result<> makeBinary(Ctx&, Index, BinaryOp op);
-template<typename Ctx> Result<> makeUnary(Ctx&, Index, UnaryOp op);
-template<typename Ctx> Result<> makeSelect(Ctx&, Index);
-template<typename Ctx> Result<> makeDrop(Ctx&, Index);
-template<typename Ctx> Result<> makeMemorySize(Ctx&, Index);
-template<typename Ctx> Result<> makeMemoryGrow(Ctx&, Index);
-template<typename Ctx> Result<> makeLocalGet(Ctx&, Index);
-template<typename Ctx> Result<> makeLocalTee(Ctx&, Index);
-template<typename Ctx> Result<> makeLocalSet(Ctx&, Index);
-template<typename Ctx> Result<> makeGlobalGet(Ctx&, Index);
-template<typename Ctx> Result<> makeGlobalSet(Ctx&, Index);
-template<typename Ctx> Result<> makeConst(Ctx&, Index, Type type);
+template<typename Ctx>
+MaybeResult<> trytable(Ctx&, const std::vector<Annotation>&, bool);
+template<typename Ctx>
+Result<> makeUnreachable(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeNop(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeBinary(Ctx&, Index, const std::vector<Annotation>&, BinaryOp op);
+template<typename Ctx>
+Result<> makeUnary(Ctx&, Index, const std::vector<Annotation>&, UnaryOp op);
+template<typename Ctx>
+Result<> makeSelect(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeDrop(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeMemorySize(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeMemoryGrow(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeLocalGet(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeLocalTee(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeLocalSet(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeGlobalGet(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeGlobalSet(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeConst(Ctx&, Index, const std::vector<Annotation>&, Type type);
+template<typename Ctx>
+Result<> makeLoad(Ctx&,
+ Index,
+ const std::vector<Annotation>&,
+ Type type,
+ bool signed_,
+ int bytes,
+ bool isAtomic);
+template<typename Ctx>
+Result<> makeStore(Ctx&,
+ Index,
+ const std::vector<Annotation>&,
+ Type type,
+ int bytes,
+ bool isAtomic);
+template<typename Ctx>
+Result<> makeAtomicRMW(Ctx&,
+ Index,
+ const std::vector<Annotation>&,
+ AtomicRMWOp op,
+ Type type,
+ uint8_t bytes);
+template<typename Ctx>
+Result<> makeAtomicCmpxchg(
+ Ctx&, Index, const std::vector<Annotation>&, Type type, uint8_t bytes);
+template<typename Ctx>
+Result<> makeAtomicWait(Ctx&, Index, const std::vector<Annotation>&, Type type);
+template<typename Ctx>
+Result<> makeAtomicNotify(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeAtomicFence(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeSIMDExtract(
+ Ctx&, Index, const std::vector<Annotation>&, SIMDExtractOp op, size_t lanes);
+template<typename Ctx>
+Result<> makeSIMDReplace(
+ Ctx&, Index, const std::vector<Annotation>&, SIMDReplaceOp op, size_t lanes);
+template<typename Ctx>
+Result<> makeSIMDShuffle(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<>
+makeSIMDTernary(Ctx&, Index, const std::vector<Annotation>&, SIMDTernaryOp op);
+template<typename Ctx>
+Result<>
+makeSIMDShift(Ctx&, Index, const std::vector<Annotation>&, SIMDShiftOp op);
+template<typename Ctx>
+Result<> makeSIMDLoad(
+ Ctx&, Index, const std::vector<Annotation>&, SIMDLoadOp op, int bytes);
+template<typename Ctx>
+Result<> makeSIMDLoadStoreLane(Ctx&,
+ Index,
+ const std::vector<Annotation>&,
+ SIMDLoadStoreLaneOp op,
+ int bytes);
+template<typename Ctx>
+Result<> makeMemoryInit(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeDataDrop(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeMemoryCopy(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeMemoryFill(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makePop(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeCall(Ctx&, Index, const std::vector<Annotation>&, bool isReturn);
+template<typename Ctx>
+Result<>
+makeCallIndirect(Ctx&, Index, const std::vector<Annotation>&, bool isReturn);
+template<typename Ctx>
+Result<>
+makeBreak(Ctx&, Index, const std::vector<Annotation>&, bool isConditional);
+template<typename Ctx>
+Result<> makeBreakTable(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeReturn(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeRefNull(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeRefIsNull(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeRefFunc(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeRefEq(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeTableGet(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeTableSet(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeTableSize(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeTableGrow(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeTableFill(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeTableCopy(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeThrow(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeRethrow(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeThrowRef(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeTupleMake(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeTupleExtract(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeTupleDrop(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<>
+makeCallRef(Ctx&, Index, const std::vector<Annotation>&, bool isReturn);
+template<typename Ctx>
+Result<> makeRefI31(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeI31Get(Ctx&, Index, const std::vector<Annotation>&, bool signed_);
+template<typename Ctx>
+Result<> makeRefTest(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeRefCast(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<>
+makeBrOnNull(Ctx&, Index, const std::vector<Annotation>&, bool onFail = false);
+template<typename Ctx>
+Result<>
+makeBrOnCast(Ctx&, Index, const std::vector<Annotation>&, bool onFail = false);
+template<typename Ctx>
+Result<>
+makeStructNew(Ctx&, Index, const std::vector<Annotation>&, bool default_);
+template<typename Ctx>
+Result<> makeStructGet(Ctx&,
+ Index,
+ const std::vector<Annotation>&,
+ bool signed_ = false);
+template<typename Ctx>
+Result<> makeStructSet(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<>
+makeArrayNew(Ctx&, Index, const std::vector<Annotation>&, bool default_);
+template<typename Ctx>
+Result<> makeArrayNewData(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeArrayNewElem(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeArrayNewFixed(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<>
+makeArrayGet(Ctx&, Index, const std::vector<Annotation>&, bool signed_ = false);
+template<typename Ctx>
+Result<> makeArraySet(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeArrayLen(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeArrayCopy(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeArrayFill(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeArrayInitData(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeArrayInitElem(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeRefAs(Ctx&, Index, const std::vector<Annotation>&, RefAsOp op);
+template<typename Ctx>
+Result<> makeStringNew(
+ Ctx&, Index, const std::vector<Annotation>&, StringNewOp op, bool try_);
+template<typename Ctx>
+Result<> makeStringConst(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeStringMeasure(Ctx&,
+ Index,
+ const std::vector<Annotation>&,
+ StringMeasureOp op);
+template<typename Ctx>
+Result<> makeStringEncode(Ctx&,
+ Index,
+ const std::vector<Annotation>&,
+ StringEncodeOp op);
+template<typename Ctx>
+Result<> makeStringConcat(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeStringEq(Ctx&, Index, const std::vector<Annotation>&, StringEqOp);
template<typename Ctx>
Result<>
-makeLoad(Ctx&, Index, Type type, bool signed_, int bytes, bool isAtomic);
-template<typename Ctx>
-Result<> makeStore(Ctx&, Index, Type type, int bytes, bool isAtomic);
-template<typename Ctx>
-Result<> makeAtomicRMW(Ctx&, Index, AtomicRMWOp op, Type type, uint8_t bytes);
-template<typename Ctx>
-Result<> makeAtomicCmpxchg(Ctx&, Index, Type type, uint8_t bytes);
-template<typename Ctx> Result<> makeAtomicWait(Ctx&, Index, Type type);
-template<typename Ctx> Result<> makeAtomicNotify(Ctx&, Index);
-template<typename Ctx> Result<> makeAtomicFence(Ctx&, Index);
-template<typename Ctx>
-Result<> makeSIMDExtract(Ctx&, Index, SIMDExtractOp op, size_t lanes);
-template<typename Ctx>
-Result<> makeSIMDReplace(Ctx&, Index, SIMDReplaceOp op, size_t lanes);
-template<typename Ctx> Result<> makeSIMDShuffle(Ctx&, Index);
-template<typename Ctx> Result<> makeSIMDTernary(Ctx&, Index, SIMDTernaryOp op);
-template<typename Ctx> Result<> makeSIMDShift(Ctx&, Index, SIMDShiftOp op);
-template<typename Ctx>
-Result<> makeSIMDLoad(Ctx&, Index, SIMDLoadOp op, int bytes);
-template<typename Ctx>
-Result<> makeSIMDLoadStoreLane(Ctx&, Index, SIMDLoadStoreLaneOp op, int bytes);
-template<typename Ctx> Result<> makeMemoryInit(Ctx&, Index);
-template<typename Ctx> Result<> makeDataDrop(Ctx&, Index);
-template<typename Ctx> Result<> makeMemoryCopy(Ctx&, Index);
-template<typename Ctx> Result<> makeMemoryFill(Ctx&, Index);
-template<typename Ctx> Result<> makePop(Ctx&, Index);
-template<typename Ctx> Result<> makeCall(Ctx&, Index, bool isReturn);
-template<typename Ctx> Result<> makeCallIndirect(Ctx&, Index, bool isReturn);
-template<typename Ctx> Result<> makeBreak(Ctx&, Index, bool isConditional);
-template<typename Ctx> Result<> makeBreakTable(Ctx&, Index);
-template<typename Ctx> Result<> makeReturn(Ctx&, Index);
-template<typename Ctx> Result<> makeRefNull(Ctx&, Index);
-template<typename Ctx> Result<> makeRefIsNull(Ctx&, Index);
-template<typename Ctx> Result<> makeRefFunc(Ctx&, Index);
-template<typename Ctx> Result<> makeRefEq(Ctx&, Index);
-template<typename Ctx> Result<> makeTableGet(Ctx&, Index);
-template<typename Ctx> Result<> makeTableSet(Ctx&, Index);
-template<typename Ctx> Result<> makeTableSize(Ctx&, Index);
-template<typename Ctx> Result<> makeTableGrow(Ctx&, Index);
-template<typename Ctx> Result<> makeTableFill(Ctx&, Index);
-template<typename Ctx> Result<> makeTableCopy(Ctx&, Index);
-template<typename Ctx> Result<> makeThrow(Ctx&, Index);
-template<typename Ctx> Result<> makeRethrow(Ctx&, Index);
-template<typename Ctx> Result<> makeThrowRef(Ctx&, Index);
-template<typename Ctx> Result<> makeTupleMake(Ctx&, Index);
-template<typename Ctx> Result<> makeTupleExtract(Ctx&, Index);
-template<typename Ctx> Result<> makeTupleDrop(Ctx&, Index);
-template<typename Ctx> Result<> makeCallRef(Ctx&, Index, bool isReturn);
-template<typename Ctx> Result<> makeRefI31(Ctx&, Index);
-template<typename Ctx> Result<> makeI31Get(Ctx&, Index, bool signed_);
-template<typename Ctx> Result<> makeRefTest(Ctx&, Index);
-template<typename Ctx> Result<> makeRefCast(Ctx&, Index);
-template<typename Ctx> Result<> makeBrOnNull(Ctx&, Index, bool onFail = false);
-template<typename Ctx> Result<> makeBrOnCast(Ctx&, Index, bool onFail = false);
-template<typename Ctx> Result<> makeStructNew(Ctx&, Index, bool default_);
-template<typename Ctx>
-Result<> makeStructGet(Ctx&, Index, bool signed_ = false);
-template<typename Ctx> Result<> makeStructSet(Ctx&, Index);
-template<typename Ctx> Result<> makeArrayNew(Ctx&, Index, bool default_);
-template<typename Ctx> Result<> makeArrayNewData(Ctx&, Index);
-template<typename Ctx> Result<> makeArrayNewElem(Ctx&, Index);
-template<typename Ctx> Result<> makeArrayNewFixed(Ctx&, Index);
-template<typename Ctx> Result<> makeArrayGet(Ctx&, Index, bool signed_ = false);
-template<typename Ctx> Result<> makeArraySet(Ctx&, Index);
-template<typename Ctx> Result<> makeArrayLen(Ctx&, Index);
-template<typename Ctx> Result<> makeArrayCopy(Ctx&, Index);
-template<typename Ctx> Result<> makeArrayFill(Ctx&, Index);
-template<typename Ctx> Result<> makeArrayInitData(Ctx&, Index);
-template<typename Ctx> Result<> makeArrayInitElem(Ctx&, Index);
-template<typename Ctx> Result<> makeRefAs(Ctx&, Index, RefAsOp op);
-template<typename Ctx>
-Result<> makeStringNew(Ctx&, Index, StringNewOp op, bool try_);
-template<typename Ctx> Result<> makeStringConst(Ctx&, Index);
-template<typename Ctx>
-Result<> makeStringMeasure(Ctx&, Index, StringMeasureOp op);
-template<typename Ctx>
-Result<> makeStringEncode(Ctx&, Index, StringEncodeOp op);
-template<typename Ctx> Result<> makeStringConcat(Ctx&, Index);
-template<typename Ctx> Result<> makeStringEq(Ctx&, Index, StringEqOp);
-template<typename Ctx> Result<> makeStringAs(Ctx&, Index, StringAsOp op);
-template<typename Ctx> Result<> makeStringWTF8Advance(Ctx&, Index);
-template<typename Ctx> Result<> makeStringWTF16Get(Ctx&, Index);
-template<typename Ctx> Result<> makeStringIterNext(Ctx&, Index);
-template<typename Ctx>
-Result<> makeStringIterMove(Ctx&, Index, StringIterMoveOp op);
-template<typename Ctx>
-Result<> makeStringSliceWTF(Ctx&, Index, StringSliceWTFOp op);
-template<typename Ctx> Result<> makeStringSliceIter(Ctx&, Index);
-template<typename Ctx> Result<> makeContNew(Ctx&, Index);
-template<typename Ctx> Result<> makeResume(Ctx&, Index);
+makeStringAs(Ctx&, Index, const std::vector<Annotation>&, StringAsOp op);
+template<typename Ctx>
+Result<> makeStringWTF8Advance(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeStringWTF16Get(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeStringIterNext(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeStringIterMove(Ctx&,
+ Index,
+ const std::vector<Annotation>&,
+ StringIterMoveOp op);
+template<typename Ctx>
+Result<> makeStringSliceWTF(Ctx&,
+ Index,
+ const std::vector<Annotation>&,
+ StringSliceWTFOp op);
+template<typename Ctx>
+Result<> makeStringSliceIter(Ctx&, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeContNew(Ctx*, Index, const std::vector<Annotation>&);
+template<typename Ctx>
+Result<> makeResume(Ctx&, Index, const std::vector<Annotation>&);
// Modules
template<typename Ctx> MaybeResult<Index> maybeTypeidx(Ctx& ctx);
@@ -222,12 +358,18 @@ template<typename Ctx> Result<> module(Ctx&);
template<typename Ctx> struct WithPosition {
Ctx& ctx;
Index original;
+ std::vector<Annotation> annotations;
- WithPosition(Ctx& ctx, Index pos) : ctx(ctx), original(ctx.in.getPos()) {
+ WithPosition(Ctx& ctx, Index pos)
+ : ctx(ctx), original(ctx.in.getPos()),
+ annotations(ctx.in.takeAnnotations()) {
ctx.in.setIndex(pos);
}
- ~WithPosition() { ctx.in.setIndex(original); }
+ ~WithPosition() {
+ ctx.in.setIndex(original);
+ ctx.in.setAnnotations(std::move(annotations));
+ }
};
// Deduction guide to satisfy -Wctad-maybe-unsupported.
@@ -690,57 +832,75 @@ template<typename Ctx> Result<uint32_t> tupleArity(Ctx& ctx) {
// Instructions
// ============
+template<typename Ctx>
+void setSrcLoc(Ctx& ctx, const std::vector<Annotation>& annotations) {
+ for (const auto& annotation : annotations) {
+ if (annotation.kind == srcAnnotationKind) {
+ ctx.setSrcLoc(annotation);
+ }
+ }
+}
+
// blockinstr ::= block | loop | if-else | try-catch | try_table
-template<typename Ctx> MaybeResult<> foldedBlockinstr(Ctx& ctx) {
- if (auto i = block(ctx, true)) {
+template<typename Ctx>
+MaybeResult<> foldedBlockinstr(Ctx& ctx,
+ const std::vector<Annotation>& annotations) {
+ setSrcLoc(ctx, annotations);
+ if (auto i = block(ctx, annotations, true)) {
return i;
}
- if (auto i = ifelse(ctx, true)) {
+ if (auto i = ifelse(ctx, annotations, true)) {
return i;
}
- if (auto i = loop(ctx, true)) {
+ if (auto i = loop(ctx, annotations, true)) {
return i;
}
- if (auto i = trycatch(ctx, true)) {
+ if (auto i = trycatch(ctx, annotations, true)) {
return i;
}
- if (auto i = trytable(ctx, true)) {
+ if (auto i = trytable(ctx, annotations, true)) {
return i;
}
return {};
}
-template<typename Ctx> MaybeResult<> unfoldedBlockinstr(Ctx& ctx) {
- if (auto i = block(ctx, false)) {
+template<typename Ctx>
+MaybeResult<> unfoldedBlockinstr(Ctx& ctx,
+ const std::vector<Annotation>& annotations) {
+ setSrcLoc(ctx, annotations);
+ if (auto i = block(ctx, annotations, false)) {
return i;
}
- if (auto i = ifelse(ctx, false)) {
+ if (auto i = ifelse(ctx, annotations, false)) {
return i;
}
- if (auto i = loop(ctx, false)) {
+ if (auto i = loop(ctx, annotations, false)) {
return i;
}
- if (auto i = trycatch(ctx, false)) {
+ if (auto i = trycatch(ctx, annotations, false)) {
return i;
}
- if (auto i = trytable(ctx, false)) {
+ if (auto i = trytable(ctx, annotations, false)) {
return i;
}
return {};
}
-template<typename Ctx> MaybeResult<> blockinstr(Ctx& ctx) {
- if (auto i = foldedBlockinstr(ctx)) {
+template<typename Ctx>
+MaybeResult<> blockinstr(Ctx& ctx, const std::vector<Annotation>& annotations) {
+ if (auto i = foldedBlockinstr(ctx, annotations)) {
return i;
}
- if (auto i = unfoldedBlockinstr(ctx)) {
+ if (auto i = unfoldedBlockinstr(ctx, annotations)) {
return i;
}
return {};
}
// plaininstr ::= ... all plain instructions ...
-template<typename Ctx> MaybeResult<> plaininstr(Ctx& ctx) {
+template<typename Ctx>
+MaybeResult<> plaininstr(Ctx& ctx, const std::vector<Annotation>& annotations) {
+ setSrcLoc(ctx, annotations);
auto pos = ctx.in.getPos();
auto keyword = ctx.in.takeKeyword();
if (!keyword) {
@@ -762,10 +922,10 @@ template<typename Ctx> MaybeResult<> instr(Ctx& ctx) {
return {};
}
}
- if (auto inst = blockinstr(ctx)) {
+ if (auto inst = blockinstr(ctx, ctx.in.getAnnotations())) {
return inst;
}
- if (auto inst = plaininstr(ctx)) {
+ if (auto inst = plaininstr(ctx, ctx.in.getAnnotations())) {
return inst;
}
// TODO: Handle folded plain instructions as well.
@@ -785,28 +945,35 @@ template<typename Ctx> MaybeResult<> foldedinstr(Ctx& ctx) {
// A stack of (start, end) position pairs defining the positions of
// instructions that need to be parsed after their folded children.
- std::vector<std::pair<size_t, std::optional<size_t>>> foldedInstrs;
+ struct InstrInfo {
+ size_t start;
+ std::optional<size_t> end;
+ std::vector<Annotation> annotations;
+ };
+ std::vector<InstrInfo> foldedInstrs;
do {
if (ctx.in.takeRParen()) {
// We've reached the end of a folded instruction. Parse it for real.
- auto [start, end] = foldedInstrs.back();
- if (!end) {
+ auto info = std::move(foldedInstrs.back());
+ if (!info.end) {
return ctx.in.err("unexpected end of folded instruction");
}
foldedInstrs.pop_back();
- WithPosition with(ctx, start);
- auto inst = plaininstr(ctx);
+ WithPosition with(ctx, info.start);
+ auto inst = plaininstr(ctx, std::move(info.annotations));
assert(inst && "unexpectedly failed to parse instruction");
CHECK_ERR(inst);
- assert(ctx.in.getPos() == *end && "expected end of instruction");
+ assert(ctx.in.getPos() == *info.end && "expected end of instruction");
continue;
}
+ auto annotations = ctx.in.takeAnnotations();
+
// We're not ending an instruction, so we must be starting a new one. Maybe
// it is a block instruction.
- if (auto blockinst = foldedBlockinstr(ctx)) {
+ if (auto blockinst = foldedBlockinstr(ctx, annotations)) {
CHECK_ERR(blockinst);
continue;
}
@@ -815,13 +982,13 @@ template<typename Ctx> MaybeResult<> foldedinstr(Ctx& ctx) {
if (!ctx.in.takeLParen()) {
return ctx.in.err("expected folded instruction");
}
- foldedInstrs.push_back({ctx.in.getPos(), {}});
+ foldedInstrs.push_back({ctx.in.getPos(), {}, std::move(annotations)});
// Consume the span for the instruction without meaningfully parsing it yet.
// It will be parsed for real using the real context after its s-expression
// children have been found and parsed.
NullCtx nullCtx(ctx.in);
- if (auto inst = plaininstr(nullCtx)) {
+ if (auto inst = plaininstr(nullCtx, {})) {
CHECK_ERR(inst);
ctx.in = nullCtx.in;
} else {
@@ -829,8 +996,8 @@ template<typename Ctx> MaybeResult<> foldedinstr(Ctx& ctx) {
}
// The folded instruction we just started ends here.
- assert(!foldedInstrs.back().second);
- foldedInstrs.back().second = ctx.in.getPos();
+ assert(!foldedInstrs.back().end);
+ foldedInstrs.back().end = ctx.in.getPos();
} while (!foldedInstrs.empty());
return Ok{};
@@ -903,7 +1070,9 @@ template<typename Ctx> Result<typename Ctx::BlockTypeT> blocktype(Ctx& ctx) {
// block ::= 'block' label blocktype instr* 'end' id? if id = {} or id = label
// | '(' 'block' label blocktype instr* ')'
-template<typename Ctx> MaybeResult<> block(Ctx& ctx, bool folded) {
+template<typename Ctx>
+MaybeResult<>
+block(Ctx& ctx, const std::vector<Annotation>& annotations, bool folded) {
auto pos = ctx.in.getPos();
if ((folded && !ctx.in.takeSExprStart("block"sv)) ||
@@ -916,7 +1085,7 @@ template<typename Ctx> MaybeResult<> block(Ctx& ctx, bool folded) {
auto type = blocktype(ctx);
CHECK_ERR(type);
- ctx.makeBlock(pos, label, *type);
+ ctx.makeBlock(pos, annotations, label, *type);
CHECK_ERR(instrs(ctx));
@@ -940,7 +1109,9 @@ template<typename Ctx> MaybeResult<> block(Ctx& ctx, bool folded) {
// if ::= 'if' label blocktype instr1* ('else' id1? instr2*)? 'end' id2?
// | '(' 'if' label blocktype foldedinstr* '(' 'then' instr1* ')'
// ('(' 'else' instr2* ')')? ')'
-template<typename Ctx> MaybeResult<> ifelse(Ctx& ctx, bool folded) {
+template<typename Ctx>
+MaybeResult<>
+ifelse(Ctx& ctx, const std::vector<Annotation>& annotations, bool folded) {
auto pos = ctx.in.getPos();
if ((folded && !ctx.in.takeSExprStart("if"sv)) ||
@@ -957,7 +1128,7 @@ template<typename Ctx> MaybeResult<> ifelse(Ctx& ctx, bool folded) {
CHECK_ERR(foldedinstrs(ctx));
}
- ctx.makeIf(pos, label, *type);
+ ctx.makeIf(pos, annotations, label, *type);
if (folded && !ctx.in.takeSExprStart("then"sv)) {
return ctx.in.err("expected 'then' before if instructions");
@@ -1004,7 +1175,9 @@ template<typename Ctx> MaybeResult<> ifelse(Ctx& ctx, bool folded) {
// loop ::= 'loop' label blocktype instr* 'end' id?
// | '(' 'loop' label blocktype instr* ')'
-template<typename Ctx> MaybeResult<> loop(Ctx& ctx, bool folded) {
+template<typename Ctx>
+MaybeResult<>
+loop(Ctx& ctx, const std::vector<Annotation>& annotations, bool folded) {
auto pos = ctx.in.getPos();
if ((folded && !ctx.in.takeSExprStart("loop"sv)) ||
@@ -1017,7 +1190,7 @@ template<typename Ctx> MaybeResult<> loop(Ctx& ctx, bool folded) {
auto type = blocktype(ctx);
CHECK_ERR(type);
- ctx.makeLoop(pos, label, *type);
+ ctx.makeLoop(pos, annotations, label, *type);
CHECK_ERR(instrs(ctx));
@@ -1045,7 +1218,9 @@ template<typename Ctx> MaybeResult<> loop(Ctx& ctx, bool folded) {
// | 'try' label blocktype instr* 'deledate' label
// | '(' 'try' label blocktype '(' 'do' instr* ')'
// '(' 'delegate' label ')' ')'
-template<typename Ctx> MaybeResult<> trycatch(Ctx& ctx, bool folded) {
+template<typename Ctx>
+MaybeResult<>
+trycatch(Ctx& ctx, const std::vector<Annotation>& annotations, bool folded) {
auto pos = ctx.in.getPos();
if ((folded && !ctx.in.takeSExprStart("try"sv)) ||
@@ -1058,7 +1233,7 @@ template<typename Ctx> MaybeResult<> trycatch(Ctx& ctx, bool folded) {
auto type = blocktype(ctx);
CHECK_ERR(type);
- CHECK_ERR(ctx.makeTry(pos, label, *type));
+ CHECK_ERR(ctx.makeTry(pos, annotations, label, *type));
if (folded) {
if (!ctx.in.takeSExprStart("do"sv)) {
@@ -1229,7 +1404,9 @@ template<typename Ctx> MaybeResult<typename Ctx::CatchT> catchinstr(Ctx& ctx) {
// trytable ::= 'try_table' label blocktype catchinstr* instr* 'end' id?
// | '(' 'try_table' label blocktype catchinstr* instr* ')'
-template<typename Ctx> MaybeResult<> trytable(Ctx& ctx, bool folded) {
+template<typename Ctx>
+MaybeResult<>
+trytable(Ctx& ctx, const std::vector<Annotation>& annotations, bool folded) {
auto pos = ctx.in.getPos();
if ((folded && !ctx.in.takeSExprStart("try_table"sv)) ||
@@ -1248,7 +1425,7 @@ template<typename Ctx> MaybeResult<> trytable(Ctx& ctx, bool folded) {
ctx.appendCatch(catches, *c);
}
- CHECK_ERR(ctx.makeTryTable(pos, label, *type, catches));
+ CHECK_ERR(ctx.makeTryTable(pos, annotations, label, *type, catches));
CHECK_ERR(instrs(ctx));
@@ -1269,95 +1446,132 @@ template<typename Ctx> MaybeResult<> trytable(Ctx& ctx, bool folded) {
return ctx.visitEnd();
}
-template<typename Ctx> Result<> makeUnreachable(Ctx& ctx, Index pos) {
- return ctx.makeUnreachable(pos);
+template<typename Ctx>
+Result<> makeUnreachable(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
+ return ctx.makeUnreachable(pos, annotations);
}
-template<typename Ctx> Result<> makeNop(Ctx& ctx, Index pos) {
- return ctx.makeNop(pos);
+template<typename Ctx>
+Result<>
+makeNop(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
+ return ctx.makeNop(pos, annotations);
}
-template<typename Ctx> Result<> makeBinary(Ctx& ctx, Index pos, BinaryOp op) {
- return ctx.makeBinary(pos, op);
+template<typename Ctx>
+Result<> makeBinary(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ BinaryOp op) {
+ return ctx.makeBinary(pos, annotations, op);
}
-template<typename Ctx> Result<> makeUnary(Ctx& ctx, Index pos, UnaryOp op) {
- return ctx.makeUnary(pos, op);
+template<typename Ctx>
+Result<> makeUnary(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ UnaryOp op) {
+ return ctx.makeUnary(pos, annotations, op);
}
-template<typename Ctx> Result<> makeSelect(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeSelect(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto res = results(ctx);
CHECK_ERR(res);
- return ctx.makeSelect(pos, res.getPtr());
+ return ctx.makeSelect(pos, annotations, res.getPtr());
}
-template<typename Ctx> Result<> makeDrop(Ctx& ctx, Index pos) {
- return ctx.makeDrop(pos);
+template<typename Ctx>
+Result<>
+makeDrop(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
+ return ctx.makeDrop(pos, annotations);
}
-template<typename Ctx> Result<> makeMemorySize(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<> makeMemorySize(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
auto mem = maybeMemidx(ctx);
CHECK_ERR(mem);
- return ctx.makeMemorySize(pos, mem.getPtr());
+ return ctx.makeMemorySize(pos, annotations, mem.getPtr());
}
-template<typename Ctx> Result<> makeMemoryGrow(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<> makeMemoryGrow(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
auto mem = maybeMemidx(ctx);
CHECK_ERR(mem);
- return ctx.makeMemoryGrow(pos, mem.getPtr());
+ return ctx.makeMemoryGrow(pos, annotations, mem.getPtr());
}
-template<typename Ctx> Result<> makeLocalGet(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeLocalGet(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto local = localidx(ctx);
CHECK_ERR(local);
- return ctx.makeLocalGet(pos, *local);
+ return ctx.makeLocalGet(pos, annotations, *local);
}
-template<typename Ctx> Result<> makeLocalTee(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeLocalTee(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto local = localidx(ctx);
CHECK_ERR(local);
- return ctx.makeLocalTee(pos, *local);
+ return ctx.makeLocalTee(pos, annotations, *local);
}
-template<typename Ctx> Result<> makeLocalSet(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeLocalSet(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto local = localidx(ctx);
CHECK_ERR(local);
- return ctx.makeLocalSet(pos, *local);
+ return ctx.makeLocalSet(pos, annotations, *local);
}
-template<typename Ctx> Result<> makeGlobalGet(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeGlobalGet(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto global = globalidx(ctx);
CHECK_ERR(global);
- return ctx.makeGlobalGet(pos, *global);
+ return ctx.makeGlobalGet(pos, annotations, *global);
}
-template<typename Ctx> Result<> makeGlobalSet(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeGlobalSet(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto global = globalidx(ctx);
CHECK_ERR(global);
- return ctx.makeGlobalSet(pos, *global);
+ return ctx.makeGlobalSet(pos, annotations, *global);
}
-template<typename Ctx> Result<> makeConst(Ctx& ctx, Index pos, Type type) {
+template<typename Ctx>
+Result<> makeConst(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ Type type) {
assert(type.isBasic());
switch (type.getBasic()) {
case Type::i32:
if (auto c = ctx.in.takeI32()) {
- return ctx.makeI32Const(pos, *c);
+ return ctx.makeI32Const(pos, annotations, *c);
}
return ctx.in.err("expected i32");
case Type::i64:
if (auto c = ctx.in.takeI64()) {
- return ctx.makeI64Const(pos, *c);
+ return ctx.makeI64Const(pos, annotations, *c);
}
return ctx.in.err("expected i64");
case Type::f32:
if (auto c = ctx.in.takeF32()) {
- return ctx.makeF32Const(pos, *c);
+ return ctx.makeF32Const(pos, annotations, *c);
}
return ctx.in.err("expected f32");
case Type::f64:
if (auto c = ctx.in.takeF64()) {
- return ctx.makeF64Const(pos, *c);
+ return ctx.makeF64Const(pos, annotations, *c);
}
return ctx.in.err("expected f64");
case Type::v128:
@@ -1370,7 +1584,7 @@ template<typename Ctx> Result<> makeConst(Ctx& ctx, Index pos, Type type) {
}
vals[i] = *val;
}
- return ctx.makeI8x16Const(pos, vals);
+ return ctx.makeI8x16Const(pos, annotations, vals);
}
if (ctx.in.takeKeyword("i16x8"sv)) {
std::array<uint16_t, 8> vals;
@@ -1381,7 +1595,7 @@ template<typename Ctx> Result<> makeConst(Ctx& ctx, Index pos, Type type) {
}
vals[i] = *val;
}
- return ctx.makeI16x8Const(pos, vals);
+ return ctx.makeI16x8Const(pos, annotations, vals);
}
if (ctx.in.takeKeyword("i32x4"sv)) {
std::array<uint32_t, 4> vals;
@@ -1392,7 +1606,7 @@ template<typename Ctx> Result<> makeConst(Ctx& ctx, Index pos, Type type) {
}
vals[i] = *val;
}
- return ctx.makeI32x4Const(pos, vals);
+ return ctx.makeI32x4Const(pos, annotations, vals);
}
if (ctx.in.takeKeyword("i64x2"sv)) {
std::array<uint64_t, 2> vals;
@@ -1403,7 +1617,7 @@ template<typename Ctx> Result<> makeConst(Ctx& ctx, Index pos, Type type) {
}
vals[i] = *val;
}
- return ctx.makeI64x2Const(pos, vals);
+ return ctx.makeI64x2Const(pos, annotations, vals);
}
if (ctx.in.takeKeyword("f32x4"sv)) {
std::array<float, 4> vals;
@@ -1414,7 +1628,7 @@ template<typename Ctx> Result<> makeConst(Ctx& ctx, Index pos, Type type) {
}
vals[i] = *val;
}
- return ctx.makeF32x4Const(pos, vals);
+ return ctx.makeF32x4Const(pos, annotations, vals);
}
if (ctx.in.takeKeyword("f64x2"sv)) {
std::array<double, 2> vals;
@@ -1425,7 +1639,7 @@ template<typename Ctx> Result<> makeConst(Ctx& ctx, Index pos, Type type) {
}
vals[i] = *val;
}
- return ctx.makeF64x2Const(pos, vals);
+ return ctx.makeF64x2Const(pos, annotations, vals);
}
return ctx.in.err("expected SIMD vector shape");
case Type::none:
@@ -1436,82 +1650,125 @@ template<typename Ctx> Result<> makeConst(Ctx& ctx, Index pos, Type type) {
}
template<typename Ctx>
-Result<> makeLoad(
- Ctx& ctx, Index pos, Type type, bool signed_, int bytes, bool isAtomic) {
+Result<> makeLoad(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ Type type,
+ bool signed_,
+ int bytes,
+ bool isAtomic) {
auto mem = maybeMemidx(ctx);
CHECK_ERR(mem);
auto arg = memarg(ctx, bytes);
CHECK_ERR(arg);
- return ctx.makeLoad(pos, type, signed_, bytes, isAtomic, mem.getPtr(), *arg);
+ return ctx.makeLoad(
+ pos, annotations, type, signed_, bytes, isAtomic, mem.getPtr(), *arg);
}
template<typename Ctx>
-Result<> makeStore(Ctx& ctx, Index pos, Type type, int bytes, bool isAtomic) {
+Result<> makeStore(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ Type type,
+ int bytes,
+ bool isAtomic) {
auto mem = maybeMemidx(ctx);
CHECK_ERR(mem);
auto arg = memarg(ctx, bytes);
CHECK_ERR(arg);
- return ctx.makeStore(pos, type, bytes, isAtomic, mem.getPtr(), *arg);
+ return ctx.makeStore(
+ pos, annotations, type, bytes, isAtomic, mem.getPtr(), *arg);
}
template<typename Ctx>
-Result<>
-makeAtomicRMW(Ctx& ctx, Index pos, AtomicRMWOp op, Type type, uint8_t bytes) {
+Result<> makeAtomicRMW(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ AtomicRMWOp op,
+ Type type,
+ uint8_t bytes) {
auto mem = maybeMemidx(ctx);
CHECK_ERR(mem);
auto arg = memarg(ctx, bytes);
CHECK_ERR(arg);
- return ctx.makeAtomicRMW(pos, op, type, bytes, mem.getPtr(), *arg);
+ return ctx.makeAtomicRMW(
+ pos, annotations, op, type, bytes, mem.getPtr(), *arg);
}
template<typename Ctx>
-Result<> makeAtomicCmpxchg(Ctx& ctx, Index pos, Type type, uint8_t bytes) {
+Result<> makeAtomicCmpxchg(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ Type type,
+ uint8_t bytes) {
auto mem = maybeMemidx(ctx);
CHECK_ERR(mem);
auto arg = memarg(ctx, bytes);
CHECK_ERR(arg);
- return ctx.makeAtomicCmpxchg(pos, type, bytes, mem.getPtr(), *arg);
+ return ctx.makeAtomicCmpxchg(
+ pos, annotations, type, bytes, mem.getPtr(), *arg);
}
-template<typename Ctx> Result<> makeAtomicWait(Ctx& ctx, Index pos, Type type) {
+template<typename Ctx>
+Result<> makeAtomicWait(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ Type type) {
auto mem = maybeMemidx(ctx);
CHECK_ERR(mem);
auto arg = memarg(ctx, type == Type::i32 ? 4 : 8);
CHECK_ERR(arg);
- return ctx.makeAtomicWait(pos, type, mem.getPtr(), *arg);
+ return ctx.makeAtomicWait(pos, annotations, type, mem.getPtr(), *arg);
}
-template<typename Ctx> Result<> makeAtomicNotify(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<> makeAtomicNotify(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
auto mem = maybeMemidx(ctx);
CHECK_ERR(mem);
auto arg = memarg(ctx, 4);
CHECK_ERR(arg);
- return ctx.makeAtomicNotify(pos, mem.getPtr(), *arg);
+ return ctx.makeAtomicNotify(pos, annotations, mem.getPtr(), *arg);
}
-template<typename Ctx> Result<> makeAtomicFence(Ctx& ctx, Index pos) {
- return ctx.makeAtomicFence(pos);
+template<typename Ctx>
+Result<> makeAtomicFence(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
+ return ctx.makeAtomicFence(pos, annotations);
}
template<typename Ctx>
-Result<> makeSIMDExtract(Ctx& ctx, Index pos, SIMDExtractOp op, size_t) {
+Result<> makeSIMDExtract(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ SIMDExtractOp op,
+ size_t) {
auto lane = ctx.in.takeU8();
if (!lane) {
return ctx.in.err("expected lane index");
}
- return ctx.makeSIMDExtract(pos, op, *lane);
+ return ctx.makeSIMDExtract(pos, annotations, op, *lane);
}
template<typename Ctx>
-Result<> makeSIMDReplace(Ctx& ctx, Index pos, SIMDReplaceOp op, size_t lanes) {
+Result<> makeSIMDReplace(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ SIMDReplaceOp op,
+ size_t lanes) {
auto lane = ctx.in.takeU8();
if (!lane) {
return ctx.in.err("expected lane index");
}
- return ctx.makeSIMDReplace(pos, op, *lane);
+ return ctx.makeSIMDReplace(pos, annotations, op, *lane);
}
-template<typename Ctx> Result<> makeSIMDShuffle(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<> makeSIMDShuffle(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
std::array<uint8_t, 16> lanes;
for (int i = 0; i < 16; ++i) {
auto lane = ctx.in.takeU8();
@@ -1520,31 +1777,44 @@ template<typename Ctx> Result<> makeSIMDShuffle(Ctx& ctx, Index pos) {
}
lanes[i] = *lane;
}
- return ctx.makeSIMDShuffle(pos, lanes);
+ return ctx.makeSIMDShuffle(pos, annotations, lanes);
}
template<typename Ctx>
-Result<> makeSIMDTernary(Ctx& ctx, Index pos, SIMDTernaryOp op) {
- return ctx.makeSIMDTernary(pos, op);
+Result<> makeSIMDTernary(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ SIMDTernaryOp op) {
+ return ctx.makeSIMDTernary(pos, annotations, op);
}
template<typename Ctx>
-Result<> makeSIMDShift(Ctx& ctx, Index pos, SIMDShiftOp op) {
- return ctx.makeSIMDShift(pos, op);
+Result<> makeSIMDShift(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ SIMDShiftOp op) {
+ return ctx.makeSIMDShift(pos, annotations, op);
}
template<typename Ctx>
-Result<> makeSIMDLoad(Ctx& ctx, Index pos, SIMDLoadOp op, int bytes) {
+Result<> makeSIMDLoad(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ SIMDLoadOp op,
+ int bytes) {
auto mem = maybeMemidx(ctx);
CHECK_ERR(mem);
auto arg = memarg(ctx, bytes);
CHECK_ERR(arg);
- return ctx.makeSIMDLoad(pos, op, mem.getPtr(), *arg);
+ return ctx.makeSIMDLoad(pos, annotations, op, mem.getPtr(), *arg);
}
template<typename Ctx>
-Result<>
-makeSIMDLoadStoreLane(Ctx& ctx, Index pos, SIMDLoadStoreLaneOp op, int bytes) {
+Result<> makeSIMDLoadStoreLane(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ SIMDLoadStoreLaneOp op,
+ int bytes) {
auto reset = ctx.in.getPos();
auto retry = [&]() -> Result<> {
@@ -1557,7 +1827,8 @@ makeSIMDLoadStoreLane(Ctx& ctx, Index pos, SIMDLoadStoreLaneOp op, int bytes) {
if (!lane) {
return ctx.in.err("expected lane index");
}
- return ctx.makeSIMDLoadStoreLane(pos, op, nullptr, *arg, *lane);
+ return ctx.makeSIMDLoadStoreLane(
+ pos, annotations, op, nullptr, *arg, *lane);
};
auto mem = maybeMemidx(ctx);
@@ -1570,10 +1841,14 @@ makeSIMDLoadStoreLane(Ctx& ctx, Index pos, SIMDLoadStoreLaneOp op, int bytes) {
if (!lane) {
return retry();
}
- return ctx.makeSIMDLoadStoreLane(pos, op, mem.getPtr(), *arg, *lane);
+ return ctx.makeSIMDLoadStoreLane(
+ pos, annotations, op, mem.getPtr(), *arg, *lane);
}
-template<typename Ctx> Result<> makeMemoryInit(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<> makeMemoryInit(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
auto reset = ctx.in.getPos();
auto retry = [&]() -> Result<> {
@@ -1582,7 +1857,7 @@ template<typename Ctx> Result<> makeMemoryInit(Ctx& ctx, Index pos) {
WithPosition with(ctx, reset);
auto data = dataidx(ctx);
CHECK_ERR(data);
- return ctx.makeMemoryInit(pos, nullptr, *data);
+ return ctx.makeMemoryInit(pos, annotations, nullptr, *data);
};
auto mem = maybeMemidx(ctx);
@@ -1593,16 +1868,21 @@ template<typename Ctx> Result<> makeMemoryInit(Ctx& ctx, Index pos) {
if (data.getErr()) {
return retry();
}
- return ctx.makeMemoryInit(pos, mem.getPtr(), *data);
+ return ctx.makeMemoryInit(pos, annotations, mem.getPtr(), *data);
}
-template<typename Ctx> Result<> makeDataDrop(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeDataDrop(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto data = dataidx(ctx);
CHECK_ERR(data);
- return ctx.makeDataDrop(pos, *data);
+ return ctx.makeDataDrop(pos, annotations, *data);
}
-template<typename Ctx> Result<> makeMemoryCopy(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<> makeMemoryCopy(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
auto destMem = maybeMemidx(ctx);
CHECK_ERR(destMem);
std::optional<typename Ctx::MemoryIdxT> srcMem = std::nullopt;
@@ -1611,44 +1891,64 @@ template<typename Ctx> Result<> makeMemoryCopy(Ctx& ctx, Index pos) {
CHECK_ERR(mem);
srcMem = *mem;
}
- return ctx.makeMemoryCopy(pos, destMem.getPtr(), srcMem ? &*srcMem : nullptr);
+ return ctx.makeMemoryCopy(
+ pos, annotations, destMem.getPtr(), srcMem ? &*srcMem : nullptr);
}
-template<typename Ctx> Result<> makeMemoryFill(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<> makeMemoryFill(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
auto mem = maybeMemidx(ctx);
CHECK_ERR(mem);
- return ctx.makeMemoryFill(pos, mem.getPtr());
+ return ctx.makeMemoryFill(pos, annotations, mem.getPtr());
}
-template<typename Ctx> Result<> makePop(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makePop(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto type = valtype(ctx);
CHECK_ERR(type);
- return ctx.makePop(pos, *type);
+ return ctx.makePop(pos, annotations, *type);
}
-template<typename Ctx> Result<> makeCall(Ctx& ctx, Index pos, bool isReturn) {
+template<typename Ctx>
+Result<> makeCall(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ bool isReturn) {
auto func = funcidx(ctx);
CHECK_ERR(func);
- return ctx.makeCall(pos, *func, isReturn);
+ return ctx.makeCall(pos, annotations, *func, isReturn);
}
template<typename Ctx>
-Result<> makeCallIndirect(Ctx& ctx, Index pos, bool isReturn) {
+Result<> makeCallIndirect(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ bool isReturn) {
auto table = maybeTableidx(ctx);
CHECK_ERR(table);
auto type = typeuse(ctx);
CHECK_ERR(type);
- return ctx.makeCallIndirect(pos, table.getPtr(), *type, isReturn);
+ return ctx.makeCallIndirect(
+ pos, annotations, table.getPtr(), *type, isReturn);
}
template<typename Ctx>
-Result<> makeBreak(Ctx& ctx, Index pos, bool isConditional) {
+Result<> makeBreak(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ bool isConditional) {
auto label = labelidx(ctx);
CHECK_ERR(label);
- return ctx.makeBreak(pos, *label, isConditional);
+ return ctx.makeBreak(pos, annotations, *label, isConditional);
}
-template<typename Ctx> Result<> makeBreakTable(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<> makeBreakTable(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
std::vector<typename Ctx::LabelIdxT> labels;
while (true) {
// Parse at least one label; return an error only if we parse none.
@@ -1662,64 +1962,86 @@ template<typename Ctx> Result<> makeBreakTable(Ctx& ctx, Index pos) {
}
auto defaultLabel = labels.back();
labels.pop_back();
- return ctx.makeSwitch(pos, labels, defaultLabel);
+ return ctx.makeSwitch(pos, annotations, labels, defaultLabel);
}
-template<typename Ctx> Result<> makeReturn(Ctx& ctx, Index pos) {
- return ctx.makeReturn(pos);
+template<typename Ctx>
+Result<>
+makeReturn(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
+ return ctx.makeReturn(pos, annotations);
}
-template<typename Ctx> Result<> makeRefNull(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeRefNull(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto t = heaptype(ctx);
CHECK_ERR(t);
- return ctx.makeRefNull(pos, *t);
+ return ctx.makeRefNull(pos, annotations, *t);
}
-template<typename Ctx> Result<> makeRefIsNull(Ctx& ctx, Index pos) {
- return ctx.makeRefIsNull(pos);
+template<typename Ctx>
+Result<>
+makeRefIsNull(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
+ return ctx.makeRefIsNull(pos, annotations);
}
-template<typename Ctx> Result<> makeRefFunc(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeRefFunc(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto func = funcidx(ctx);
CHECK_ERR(func);
- return ctx.makeRefFunc(pos, *func);
+ return ctx.makeRefFunc(pos, annotations, *func);
}
-template<typename Ctx> Result<> makeRefEq(Ctx& ctx, Index pos) {
- return ctx.makeRefEq(pos);
+template<typename Ctx>
+Result<>
+makeRefEq(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
+ return ctx.makeRefEq(pos, annotations);
}
-template<typename Ctx> Result<> makeTableGet(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeTableGet(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto table = maybeTableidx(ctx);
CHECK_ERR(table);
- return ctx.makeTableGet(pos, table.getPtr());
+ return ctx.makeTableGet(pos, annotations, table.getPtr());
}
-template<typename Ctx> Result<> makeTableSet(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeTableSet(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto table = maybeTableidx(ctx);
CHECK_ERR(table);
- return ctx.makeTableSet(pos, table.getPtr());
+ return ctx.makeTableSet(pos, annotations, table.getPtr());
}
-template<typename Ctx> Result<> makeTableSize(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeTableSize(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto table = maybeTableidx(ctx);
CHECK_ERR(table);
- return ctx.makeTableSize(pos, table.getPtr());
+ return ctx.makeTableSize(pos, annotations, table.getPtr());
}
-template<typename Ctx> Result<> makeTableGrow(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeTableGrow(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto table = maybeTableidx(ctx);
CHECK_ERR(table);
- return ctx.makeTableGrow(pos, table.getPtr());
+ return ctx.makeTableGrow(pos, annotations, table.getPtr());
}
-template<typename Ctx> Result<> makeTableFill(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeTableFill(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto table = maybeTableidx(ctx);
CHECK_ERR(table);
- return ctx.makeTableFill(pos, table.getPtr());
+ return ctx.makeTableFill(pos, annotations, table.getPtr());
}
-template<typename Ctx> Result<> makeTableCopy(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeTableCopy(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto destTable = maybeTableidx(ctx);
CHECK_ERR(destTable);
auto srcTable = maybeTableidx(ctx);
@@ -1727,279 +2049,401 @@ template<typename Ctx> Result<> makeTableCopy(Ctx& ctx, Index pos) {
if (destTable && !srcTable) {
return ctx.in.err("expected table index or identifier");
}
- return ctx.makeTableCopy(pos, destTable.getPtr(), srcTable.getPtr());
+ return ctx.makeTableCopy(
+ pos, annotations, destTable.getPtr(), srcTable.getPtr());
}
-template<typename Ctx> Result<> makeThrow(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeThrow(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto tag = tagidx(ctx);
CHECK_ERR(tag);
- return ctx.makeThrow(pos, *tag);
+ return ctx.makeThrow(pos, annotations, *tag);
}
-template<typename Ctx> Result<> makeRethrow(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeRethrow(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto label = labelidx(ctx);
CHECK_ERR(label);
- return ctx.makeRethrow(pos, *label);
+ return ctx.makeRethrow(pos, annotations, *label);
}
-template<typename Ctx> Result<> makeThrowRef(Ctx& ctx, Index pos) {
- return ctx.makeThrowRef(pos);
+template<typename Ctx>
+Result<>
+makeThrowRef(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
+ return ctx.makeThrowRef(pos, annotations);
}
-template<typename Ctx> Result<> makeTupleMake(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeTupleMake(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto arity = tupleArity(ctx);
CHECK_ERR(arity);
- return ctx.makeTupleMake(pos, *arity);
+ return ctx.makeTupleMake(pos, annotations, *arity);
}
-template<typename Ctx> Result<> makeTupleExtract(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<> makeTupleExtract(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
auto arity = tupleArity(ctx);
CHECK_ERR(arity);
auto index = ctx.in.takeU32();
if (!index) {
return ctx.in.err("expected tuple index");
}
- return ctx.makeTupleExtract(pos, *arity, *index);
+ return ctx.makeTupleExtract(pos, annotations, *arity, *index);
}
-template<typename Ctx> Result<> makeTupleDrop(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeTupleDrop(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto arity = tupleArity(ctx);
CHECK_ERR(arity);
- return ctx.makeTupleDrop(pos, *arity);
+ return ctx.makeTupleDrop(pos, annotations, *arity);
}
template<typename Ctx>
-Result<> makeCallRef(Ctx& ctx, Index pos, bool isReturn) {
+Result<> makeCallRef(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ bool isReturn) {
auto type = typeidx(ctx);
CHECK_ERR(type);
- return ctx.makeCallRef(pos, *type, isReturn);
+ return ctx.makeCallRef(pos, annotations, *type, isReturn);
}
-template<typename Ctx> Result<> makeRefI31(Ctx& ctx, Index pos) {
- return ctx.makeRefI31(pos);
+template<typename Ctx>
+Result<>
+makeRefI31(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
+ return ctx.makeRefI31(pos, annotations);
}
-template<typename Ctx> Result<> makeI31Get(Ctx& ctx, Index pos, bool signed_) {
- return ctx.makeI31Get(pos, signed_);
+template<typename Ctx>
+Result<> makeI31Get(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ bool signed_) {
+ return ctx.makeI31Get(pos, annotations, signed_);
}
-template<typename Ctx> Result<> makeRefTest(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeRefTest(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto type = reftype(ctx);
CHECK_ERR(type);
- return ctx.makeRefTest(pos, *type);
+ return ctx.makeRefTest(pos, annotations, *type);
}
-template<typename Ctx> Result<> makeRefCast(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeRefCast(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto type = reftype(ctx);
CHECK_ERR(type);
- return ctx.makeRefCast(pos, *type);
+ return ctx.makeRefCast(pos, annotations, *type);
}
-template<typename Ctx> Result<> makeBrOnNull(Ctx& ctx, Index pos, bool onFail) {
+template<typename Ctx>
+Result<> makeBrOnNull(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ bool onFail) {
auto label = labelidx(ctx);
CHECK_ERR(label);
- return ctx.makeBrOn(pos, *label, onFail ? BrOnNonNull : BrOnNull);
+ return ctx.makeBrOn(
+ pos, annotations, *label, onFail ? BrOnNonNull : BrOnNull);
}
-template<typename Ctx> Result<> makeBrOnCast(Ctx& ctx, Index pos, bool onFail) {
+template<typename Ctx>
+Result<> makeBrOnCast(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ bool onFail) {
auto label = labelidx(ctx);
CHECK_ERR(label);
auto in = reftype(ctx);
CHECK_ERR(in);
auto out = reftype(ctx);
CHECK_ERR(out);
- return ctx.makeBrOn(pos, *label, onFail ? BrOnCastFail : BrOnCast, *in, *out);
+ return ctx.makeBrOn(
+ pos, annotations, *label, onFail ? BrOnCastFail : BrOnCast, *in, *out);
}
template<typename Ctx>
-Result<> makeStructNew(Ctx& ctx, Index pos, bool default_) {
+Result<> makeStructNew(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ bool default_) {
auto type = typeidx(ctx);
CHECK_ERR(type);
if (default_) {
- return ctx.makeStructNewDefault(pos, *type);
+ return ctx.makeStructNewDefault(pos, annotations, *type);
}
- return ctx.makeStructNew(pos, *type);
+ return ctx.makeStructNew(pos, annotations, *type);
}
template<typename Ctx>
-Result<> makeStructGet(Ctx& ctx, Index pos, bool signed_) {
+Result<> makeStructGet(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ bool signed_) {
auto type = typeidx(ctx);
CHECK_ERR(type);
auto field = fieldidx(ctx, *type);
CHECK_ERR(field);
- return ctx.makeStructGet(pos, *type, *field, signed_);
+ return ctx.makeStructGet(pos, annotations, *type, *field, signed_);
}
-template<typename Ctx> Result<> makeStructSet(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeStructSet(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto type = typeidx(ctx);
CHECK_ERR(type);
auto field = fieldidx(ctx, *type);
CHECK_ERR(field);
- return ctx.makeStructSet(pos, *type, *field);
+ return ctx.makeStructSet(pos, annotations, *type, *field);
}
template<typename Ctx>
-Result<> makeArrayNew(Ctx& ctx, Index pos, bool default_) {
+Result<> makeArrayNew(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ bool default_) {
auto type = typeidx(ctx);
CHECK_ERR(type);
if (default_) {
- return ctx.makeArrayNewDefault(pos, *type);
+ return ctx.makeArrayNewDefault(pos, annotations, *type);
}
- return ctx.makeArrayNew(pos, *type);
+ return ctx.makeArrayNew(pos, annotations, *type);
}
-template<typename Ctx> Result<> makeArrayNewData(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<> makeArrayNewData(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
auto type = typeidx(ctx);
CHECK_ERR(type);
auto data = dataidx(ctx);
CHECK_ERR(data);
- return ctx.makeArrayNewData(pos, *type, *data);
+ return ctx.makeArrayNewData(pos, annotations, *type, *data);
}
-template<typename Ctx> Result<> makeArrayNewElem(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<> makeArrayNewElem(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
auto type = typeidx(ctx);
CHECK_ERR(type);
auto elem = elemidx(ctx);
CHECK_ERR(elem);
- return ctx.makeArrayNewElem(pos, *type, *elem);
+ return ctx.makeArrayNewElem(pos, annotations, *type, *elem);
}
-template<typename Ctx> Result<> makeArrayNewFixed(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<> makeArrayNewFixed(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
auto type = typeidx(ctx);
CHECK_ERR(type);
auto arity = ctx.in.takeU32();
if (!arity) {
return ctx.in.err(pos, "expected array.new_fixed arity");
}
- return ctx.makeArrayNewFixed(pos, *type, *arity);
+ return ctx.makeArrayNewFixed(pos, annotations, *type, *arity);
}
template<typename Ctx>
-Result<> makeArrayGet(Ctx& ctx, Index pos, bool signed_) {
+Result<> makeArrayGet(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ bool signed_) {
auto type = typeidx(ctx);
CHECK_ERR(type);
- return ctx.makeArrayGet(pos, *type, signed_);
+ return ctx.makeArrayGet(pos, annotations, *type, signed_);
}
-template<typename Ctx> Result<> makeArraySet(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeArraySet(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto type = typeidx(ctx);
CHECK_ERR(type);
- return ctx.makeArraySet(pos, *type);
+ return ctx.makeArraySet(pos, annotations, *type);
}
-template<typename Ctx> Result<> makeArrayLen(Ctx& ctx, Index pos) {
- return ctx.makeArrayLen(pos);
+template<typename Ctx>
+Result<>
+makeArrayLen(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
+ return ctx.makeArrayLen(pos, annotations);
}
-template<typename Ctx> Result<> makeArrayCopy(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeArrayCopy(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto destType = typeidx(ctx);
CHECK_ERR(destType);
auto srcType = typeidx(ctx);
CHECK_ERR(srcType);
- return ctx.makeArrayCopy(pos, *destType, *srcType);
+ return ctx.makeArrayCopy(pos, annotations, *destType, *srcType);
}
-template<typename Ctx> Result<> makeArrayFill(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeArrayFill(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto type = typeidx(ctx);
CHECK_ERR(type);
- return ctx.makeArrayFill(pos, *type);
+ return ctx.makeArrayFill(pos, annotations, *type);
}
-template<typename Ctx> Result<> makeArrayInitData(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<> makeArrayInitData(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
auto type = typeidx(ctx);
CHECK_ERR(type);
auto data = dataidx(ctx);
CHECK_ERR(data);
- return ctx.makeArrayInitData(pos, *type, *data);
+ return ctx.makeArrayInitData(pos, annotations, *type, *data);
}
-template<typename Ctx> Result<> makeArrayInitElem(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<> makeArrayInitElem(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
auto type = typeidx(ctx);
CHECK_ERR(type);
auto elem = elemidx(ctx);
- return ctx.makeArrayInitElem(pos, *type, *elem);
+ return ctx.makeArrayInitElem(pos, annotations, *type, *elem);
}
-template<typename Ctx> Result<> makeRefAs(Ctx& ctx, Index pos, RefAsOp op) {
- return ctx.makeRefAs(pos, op);
+template<typename Ctx>
+Result<> makeRefAs(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ RefAsOp op) {
+ return ctx.makeRefAs(pos, annotations, op);
}
template<typename Ctx>
-Result<> makeStringNew(Ctx& ctx, Index pos, StringNewOp op, bool try_) {
+Result<> makeStringNew(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ StringNewOp op,
+ bool try_) {
auto mem = maybeMemidx(ctx);
CHECK_ERR(mem);
- return ctx.makeStringNew(pos, op, try_, mem.getPtr());
+ return ctx.makeStringNew(pos, annotations, op, try_, mem.getPtr());
}
-template<typename Ctx> Result<> makeStringConst(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<> makeStringConst(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
auto str = ctx.in.takeString();
if (!str) {
return ctx.in.err("expected string");
}
- return ctx.makeStringConst(pos, *str);
+ return ctx.makeStringConst(pos, annotations, *str);
}
template<typename Ctx>
-Result<> makeStringMeasure(Ctx& ctx, Index pos, StringMeasureOp op) {
- return ctx.makeStringMeasure(pos, op);
+Result<> makeStringMeasure(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ StringMeasureOp op) {
+ return ctx.makeStringMeasure(pos, annotations, op);
}
template<typename Ctx>
-Result<> makeStringEncode(Ctx& ctx, Index pos, StringEncodeOp op) {
+Result<> makeStringEncode(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ StringEncodeOp op) {
auto mem = maybeMemidx(ctx);
CHECK_ERR(mem);
- return ctx.makeStringEncode(pos, op, mem.getPtr());
+ return ctx.makeStringEncode(pos, annotations, op, mem.getPtr());
}
-template<typename Ctx> Result<> makeStringConcat(Ctx& ctx, Index pos) {
- return ctx.makeStringConcat(pos);
+template<typename Ctx>
+Result<> makeStringConcat(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
+ return ctx.makeStringConcat(pos, annotations);
}
template<typename Ctx>
-Result<> makeStringEq(Ctx& ctx, Index pos, StringEqOp op) {
- return ctx.makeStringEq(pos, op);
+Result<> makeStringEq(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ StringEqOp op) {
+ return ctx.makeStringEq(pos, annotations, op);
}
template<typename Ctx>
-Result<> makeStringAs(Ctx& ctx, Index pos, StringAsOp op) {
- return ctx.makeStringAs(pos, op);
+Result<> makeStringAs(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ StringAsOp op) {
+ return ctx.makeStringAs(pos, annotations, op);
}
-template<typename Ctx> Result<> makeStringWTF8Advance(Ctx& ctx, Index pos) {
- return ctx.makeStringWTF8Advance(pos);
+template<typename Ctx>
+Result<> makeStringWTF8Advance(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
+ return ctx.makeStringWTF8Advance(pos, annotations);
}
-template<typename Ctx> Result<> makeStringWTF16Get(Ctx& ctx, Index pos) {
- return ctx.makeStringWTF16Get(pos);
+template<typename Ctx>
+Result<> makeStringWTF16Get(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
+ return ctx.makeStringWTF16Get(pos, annotations);
}
-template<typename Ctx> Result<> makeStringIterNext(Ctx& ctx, Index pos) {
- return ctx.makeStringIterNext(pos);
+template<typename Ctx>
+Result<> makeStringIterNext(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
+ return ctx.makeStringIterNext(pos, annotations);
}
template<typename Ctx>
-Result<> makeStringIterMove(Ctx& ctx, Index pos, StringIterMoveOp op) {
- return ctx.makeStringIterMove(pos, op);
+Result<> makeStringIterMove(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ StringIterMoveOp op) {
+ return ctx.makeStringIterMove(pos, annotations, op);
}
template<typename Ctx>
-Result<> makeStringSliceWTF(Ctx& ctx, Index pos, StringSliceWTFOp op) {
- return ctx.makeStringSliceWTF(pos, op);
+Result<> makeStringSliceWTF(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations,
+ StringSliceWTFOp op) {
+ return ctx.makeStringSliceWTF(pos, annotations, op);
}
-template<typename Ctx> Result<> makeStringSliceIter(Ctx& ctx, Index pos) {
- return ctx.makeStringSliceIter(pos);
+template<typename Ctx>
+Result<> makeStringSliceIter(Ctx& ctx,
+ Index pos,
+ const std::vector<Annotation>& annotations) {
+ return ctx.makeStringSliceIter(pos, annotations);
}
-template<typename Ctx> Result<> makeContNew(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeContNew(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto type = typeidx(ctx);
CHECK_ERR(type);
- return ctx.makeContNew(pos, *type);
+ return ctx.makeContNew(pos, annotations, *type);
}
// resume ::= 'resume' typeidx ('(' 'tag' tagidx labelidx ')')*
-template<typename Ctx> Result<> makeResume(Ctx& ctx, Index pos) {
+template<typename Ctx>
+Result<>
+makeResume(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
auto type = typeidx(ctx);
CHECK_ERR(type);
@@ -2015,7 +2459,7 @@ template<typename Ctx> Result<> makeResume(Ctx& ctx, Index pos) {
}
}
- return ctx.makeResume(pos, *type, tagLabels);
+ return ctx.makeResume(pos, annotations, *type, tagLabels);
}
// =======
diff --git a/src/wasm-ir-builder.h b/src/wasm-ir-builder.h
index 05c59ca95..b37b352e3 100644
--- a/src/wasm-ir-builder.h
+++ b/src/wasm-ir-builder.h
@@ -56,6 +56,10 @@ public:
// any children or refinalization.
void push(Expression*);
+ // Set the debug location to be attached to the next visited, created, or
+ // pushed instruction.
+ void setDebugLocation(const Function::DebugLocation&);
+
// Handle the boundaries of control flow structures. Users may choose to use
// the corresponding `makeXYZ` function below instead of `visitXYZStart`, but
// either way must call `visitEnd` and friends at the appropriate times.
@@ -243,6 +247,9 @@ private:
Module& wasm;
Function* func;
Builder builder;
+ std::optional<Function::DebugLocation> debugLoc;
+
+ void applyDebugLoc(Expression* expr);
// The context for a single block scope, including the instructions parsed
// inside that scope so far and the ultimate result type we expect this block
diff --git a/src/wasm/wasm-ir-builder.cpp b/src/wasm/wasm-ir-builder.cpp
index 1df441dad..b1bf8c855 100644
--- a/src/wasm/wasm-ir-builder.cpp
+++ b/src/wasm/wasm-ir-builder.cpp
@@ -151,6 +151,8 @@ void IRBuilder::push(Expression* expr) {
}
scope.exprStack.push_back(expr);
+ applyDebugLoc(expr);
+
DBG(std::cerr << "After pushing " << ShallowExpression{expr} << ":\n");
DBG(dump());
}
@@ -208,6 +210,19 @@ Result<Expression*> IRBuilder::build() {
return expr;
}
+void IRBuilder::setDebugLocation(const Function::DebugLocation& loc) {
+ debugLoc = loc;
+}
+
+void IRBuilder::applyDebugLoc(Expression* expr) {
+ if (debugLoc) {
+ if (func) {
+ func->debugLocations[expr] = *debugLoc;
+ }
+ debugLoc.reset();
+ }
+}
+
void IRBuilder::dump() {
#if IR_BUILDER_DEBUG
std::cerr << "Scope stack";
@@ -623,11 +638,13 @@ Result<> IRBuilder::visitFunctionStart(Function* func) {
}
Result<> IRBuilder::visitBlockStart(Block* curr) {
+ applyDebugLoc(curr);
pushScope(ScopeCtx::makeBlock(curr));
return Ok{};
}
Result<> IRBuilder::visitIfStart(If* iff, Name label) {
+ applyDebugLoc(iff);
auto cond = pop();
CHECK_ERR(cond);
iff->condition = *cond;
@@ -636,11 +653,13 @@ Result<> IRBuilder::visitIfStart(If* iff, Name label) {
}
Result<> IRBuilder::visitLoopStart(Loop* loop) {
+ applyDebugLoc(loop);
pushScope(ScopeCtx::makeLoop(loop));
return Ok{};
}
Result<> IRBuilder::visitTryStart(Try* tryy, Name label) {
+ applyDebugLoc(tryy);
// The delegate label will be regenerated if we need it. See
// `getDelegateLabelName` for details.
tryy->name = Name();
@@ -649,11 +668,14 @@ Result<> IRBuilder::visitTryStart(Try* tryy, Name label) {
}
Result<> IRBuilder::visitTryTableStart(TryTable* trytable, Name label) {
+ applyDebugLoc(trytable);
pushScope(ScopeCtx::makeTryTable(trytable, label));
return Ok{};
}
Result<Expression*> IRBuilder::finishScope(Block* block) {
+ debugLoc.reset();
+
if (scopeStack.empty() || scopeStack.back().isNone()) {
return Err{"unexpected end of scope"};
}