zeek/spicy

Error on `==` in `&convert` for a bitfield member

Closed this issue · 0 comments

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.