Switch to performing some checks at compile time #2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR builds on #1 and introduces three main changes:
BITS
fromusize
tou32
, this matchesstd
's assumption that the bit width of pointers (usize
) will not exceed 2^23. This originates from LLVM here.mask
andalignment
are calculated at compile-time by making them an associated constant.BITS
properties at compile time.Some design decisions:
PtrImpl
(with minimal duplication infallback
)fallback
since users will want to be able to switch between the two without running into compilation errors.BITS
, this function may panic" behavior disabled forfallback
, one may want to actually enable the panic here for the same reason as above.should_panic
equivalent forshouldnt_compile
. I opted to usecompiletest_rs
which is commonly used in such situations. Unfortunately it comes with a few issues since one needs to manually link in thetagged_pointer.rlib
to the compile-fail tests.Due to the dependency on
compiletest_rs
and this issue,std
is enabled forcargo test
(only).