spicy
spicy copied to clipboard
Error on `==` in `&convert` for a bitfield member
Reproducer:
module Test;
public type Foo = unit {
x: bitfield(8) {
a: 0..3 &convert=($$ == 2);
b: 4..7;
};
on %done { print self; }
};
The above fails with:
/private/var/folders/lg/j_sk2y597mg6st_cnvclzxjw0000gn/T/Test_9cf8fb46577f0273-dec2483ac1f988d9.cc:99:70: error: no viable overloaded '='
std::tie(::hilti::rt::optional::valueOrInit((*__self).x), __cur) = (__x_1 = ::hilti::rt::integer::unpack<uint8_t>(__cur, ::hilti::rt::ByteOrder{::hilti::rt::ByteOrder::Network}), hilti::rt::make_result(std::make_tuple(hilti::rt::make_bitfield((hilti::rt::integer::bits(std::get<0>(*__x_1), 0, 3, ::hilti::rt::integer::BitOrder{::hilti::rt::integer::BitOrder::LSB0}) == ::hilti::rt::integer::safe<std::uint8_t>{2U}), hilti::rt::integer::bits(std::get<0>(*__x_1), 4, 7, ::hilti::rt::integer::BitOrder{::hilti::rt::integer::BitOrder::LSB0}), hilti::rt::integer::noop(std::get<0>(*__x_1))), std::get<1>(*__x_1)))).valueOrThrow();
...
Something like &convert=($$ + 2)
works fine for me.