The scratch allocator could erroneously return a slice
overlapping previously allocated memory for allocation
requests that were smaller than the arena size, but larger
than the amount of free space left in the arena.
- fix the check in mem::scratch_alloc_bytes_non_zeroed
that wasn't routing the request to the backup allocator.
- added concrete reproduction test under tests/issues.
I know this is not the best place to put them but since `[dynamic; N]T` is meant to a replacement for `small_array.Small_Array(N, T)`, I thought it would be fine for the time being.
This commit adds the directory `/core/assets/UCD/`. This directory
contains three files; `PropList.txt`, `UnicodeData.txt`, and `license.txt`.
These files are from the Unicode Database (UCD). The first two are used to
generate tables for `core/unicode`. The third is the license that
covers the files that make up the UCD.
These files are from Unicode version 17.0.0. The latest versions may be
found ad [ucd](https://www.unicode.org/Public/UCD/latest/ucd/).
The fixes apply to "use it as a MAC" which was not part of the
documented/exposed API. It now is, and is covered by the self-test
routines from the RFC.
- Deprecate the u64/u32 implementation so we can use fewer nails and have an easier time of maintaining and optimizing the package going forward. The remaining implementation still works on 32-bit targets, it's just a smidge less efficient.
- Use only 1 nail instead of 4. The tests now run 3.5% faster as a result.
Future optimizations may including using fully packed backing (no nails) using `intrinsics.overflow_*` to handle borrow and carry safely.
If the replacement rune was multi-byte, `os.replace_path_separators` would silently fail to replace anything.
Now it properly handles non-ASCII separator. Additionally added a fast path for when all runes in the input path as well as the replacement separator are simple ASCII.
Test added.