Commits
Click on a commit to change the comparison rangefeat(ast): change TypeSize to store bits instead of bytes
This enables distinguishing edge cases like 127 (fits in int8) from 128
(doesn't fit), which is needed for correct implicit and explicit integer
conversions.
- Changed internal storage from u8 (bytes 0-32) to u16 (bits 0-256)
- TypeSize::new() now takes bits directly
- Added new_fb_bytes() for fixed-bytes types that take byte counts
- bits() returns stored value, bytes() computes ceil(bits/8)
- mk_ty_int_literal no longer rounds to multiples of 8
Closes #650 refactor: make `TypeSize::new` private feat(ast): add TypeSize::new_literal_bits for integer literals
Add new_literal_bits and try_new_literal_bits methods to TypeSize that
allow non-multiple-of-8 bit sizes for integer literals. This enables
storing exact bit lengths (e.g., 7 bits for 127, 8 bits for 128) which
is needed to distinguish edge cases for signed integer conversions.
Update mk_ty_int_literal to use new_literal_bits instead of new_int_bits.