Fixes after rebasing
diff --git a/src/tools/wasm-shell.cpp b/src/tools/wasm-shell.cpp index 59d1e29..773a986 100644 --- a/src/tools/wasm-shell.cpp +++ b/src/tools/wasm-shell.cpp
@@ -364,17 +364,6 @@ if (auto* v = std::get_if<Literal>(&expected)) { if (val != *v) { - if (val.type.isVector() && v->type.isVector() && isAlternative) { - auto valLanes = val.getLanesI32x4(); - auto expLanes = v->getLanesI32x4(); - for (int i = 0; i < 4; ++i) { - if (valLanes[i] != expLanes[i]) { - err << "0x" << std::setfill('0') << std::setw(8) << std::hex - << expLanes[i] << std::dec; - return AlternativeErr{err.str(), i}; - } - } - } err << *v; return AlternativeErr{err.str()}; } @@ -397,47 +386,48 @@ return AlternativeErr{err.str()}; } } else if (auto* l = std::get_if<LaneResults>(&expected)) { - auto* lanes = &l->lanes; + auto* lanes = &l->lanes; - auto check = [&](int size, const auto& vals) -> Result<> { - for (int i = 0; i < size; ++i) { - auto check = checkLane(vals[i], (*lanes)[i], i); - if (auto* e = check.getErr()) { - err << e->msg << atIndex(); - return Err{err.str()}; - } + auto check = [&](int size, + const auto& vals) -> Result<Ok, AlternativeErr> { + for (int i = 0; i < size; ++i) { + auto check = checkLane(vals[i], (*lanes)[i]); + if (auto* e = check.getErr()) { + err << e->msg; + return AlternativeErr{err.str(), i}; } - return Ok{}; - }; + } + return Ok{}; + }; - bool isFloat = l->type == WATParser::LaneResults::LaneType::Float; - switch (lanes->size()) { - // Use unsigned values for the smaller types here to avoid sign - // extension when storing 8/16-bit values in 32-bit ints. This isn't - // needed for i32 and i64. - case 16: { - // There is no f8. - CHECK_ERR(check(16, val.getLanesUI8x16())); - break; - } - case 8: { - CHECK_ERR( - check(8, isFloat ? val.getLanesF16x8() : val.getLanesUI16x8())); - break; - } - case 4: { - CHECK_ERR( - check(4, isFloat ? val.getLanesF32x4() : val.getLanesI32x4())); - break; - } - case 2: { - CHECK_ERR( - check(2, isFloat ? val.getLanesF64x2() : val.getLanesI64x2())); - break; - } - default: - WASM_UNREACHABLE("unexpected number of lanes"); - } + bool isFloat = l->type == WATParser::LaneResults::LaneType::Float; + switch (lanes->size()) { + // Use unsigned values for the smaller types here to avoid sign + // extension when storing 8/16-bit values in 32-bit ints. This isn't + // needed for i32 and i64. + case 16: { + // There is no f8. + CHECK_ERR(check(16, val.getLanesUI8x16())); + break; + } + case 8: { + CHECK_ERR( + check(8, isFloat ? val.getLanesF16x8() : val.getLanesUI16x8())); + break; + } + case 4: { + CHECK_ERR( + check(4, isFloat ? val.getLanesF32x4() : val.getLanesI32x4())); + break; + } + case 2: { + CHECK_ERR( + check(2, isFloat ? val.getLanesF64x2() : val.getLanesI64x2())); + break; + } + default: + WASM_UNREACHABLE("unexpected number of lanes"); + } } else { WASM_UNREACHABLE("unexpected expectation"); @@ -458,15 +448,6 @@ return Err{err.str()}; } for (Index i = 0; i < values->size(); ++i) { - auto atIndex = [&]() { - if (values->size() <= 1) { - return std::string{}; - } - std::stringstream ss; - ss << " at index " << i; - return ss.str(); - }; - // non-either case if (assn.expected[i].size() == 1) { auto result = matchAlternative( @@ -477,7 +458,6 @@ if (e->lane != -1) { ss << " at lane " << e->lane; } - ss << atIndex(); return Err{ss.str()}; } continue; @@ -511,7 +491,9 @@ } ss << " but got " << (*values)[i]; - ss << atIndex(); + if (values->size() > 1) { + ss << " at index " << i; + } return Err{ss.str()}; }