There was another attempt to fix this in 1b898c81, which does prevent clashes between the Int class object and defined Int values, and similar clashes for some other classes, but there remain other cases of this kind of .WHICH clash:
> Str.WHICH Str|U43431280 > for Str, "U43431280" { say (.WHICH, .DEFINITE) } (Str|U43431280 False) (Str|U43431280 True) > Str === "U43431280" True > ObjAt.WHICH ObjAt|U43431256 > for ObjAt, ObjAt.new("U43431256") { say (.WHICH, .DEFINITE) } (ObjAt|U43431256 False) (ObjAt|U43431256 True) > ObjAt === ObjAt.new("U43431256") True -zefram