Support arbitrary unsigned integer attributes (#3591)
authorAndres Noetzli <andres.noetzli@gmail.com>
Mon, 13 Jan 2020 20:26:52 +0000 (12:26 -0800)
committerGitHub <noreply@github.com>
Mon, 13 Jan 2020 20:26:52 +0000 (12:26 -0800)
commit4e50d35447b5ee07304d2b857af388ea569db98b
tree7eb2497463ad1807dd0153b7e60c909f70cabb8d
parent81a2e226251bea677f6a920004e846a08072c851
Support arbitrary unsigned integer attributes (#3591)

Fixes #3586. On macOS, `size_t` resolves to `unsigned long` whereas `uint64_t`
resolves to `unsigned long long`. Even though the types have the same bit-width
and signedness, they are not considered the same type. This caused issues with
`Attribute`s that store `size_t` values because we only specialized the
`getTable()` struct for `uint64_t`. This commit changes the specialization to
work for arbitrary unsigned integer types of at most 64-bit. It does that by
generalizing the specialization of `getTable()` and by implementing a
`KindValueToTableValueMapping` for unsigned integer attributes of up to 64-bit
that casts integers between the attributes bit-width and `uint64_t`.
src/expr/attribute.h
src/expr/attribute_internals.h