// Sub-32-bit enum variants ride through a protocol-typed receiver's
// method call without being collapsed to tag=0.

#import "modules/std.sx";

Fmt :: enum { a; b; }

Proto :: protocol {
  take_fmt :: (f: Fmt);
}

Impl :: struct {}
impl Proto for Impl {
  take_fmt :: (self: *Impl, f: Fmt) {
    n : i64 = xx f;
    print("proto f = {}\n", n);
  }
}

take :: (f: Fmt) -> i64 {
  n : i64 = xx f;
  n
}

main :: () -> i32 {
  print("direct a={} b={}\n", take(.a), take(.b));

  p : Proto = xx @Impl.{};
  p.take_fmt(.b);
  p.take_fmt(.a);
  0
}
