py: Fix undefined left shift operations.

By ensuring the value to be shifted is an unsigned of the appropriate type.

This fixes several runtime diagnostics such as:

    ../../py/binary.c:199:28: runtime error:
     left shift of 32768 by 16 places
     cannot be represented in type 'int'

Signed-off-by: Jeff Epler <jepler@gmail.com>
This commit is contained in:
Jeff Epler
2025-06-01 20:06:56 +02:00
committed by Damien George
parent 816246836e
commit 2c8ccd3ee8
2 changed files with 3 additions and 3 deletions

View File

@@ -759,7 +759,7 @@ static void bit_vector_clear(bit_vector_t *self) {
static bool bit_vector_is_set(bit_vector_t *self, size_t index) {
const size_t bits_size = sizeof(*self->bits) * MP_BITS_PER_BYTE;
return index / bits_size < self->alloc
&& (self->bits[index / bits_size] & (1 << (index % bits_size))) != 0;
&& (self->bits[index / bits_size] & ((uintptr_t)1 << (index % bits_size))) != 0;
}
static void bit_vector_set(bit_vector_t *self, size_t index) {
@@ -770,7 +770,7 @@ static void bit_vector_set(bit_vector_t *self, size_t index) {
self->bits = m_renew(uintptr_t, self->bits, self->alloc, new_alloc);
self->alloc = new_alloc;
}
self->bits[index / bits_size] |= 1 << (index % bits_size);
self->bits[index / bits_size] |= (uintptr_t)1 << (index % bits_size);
}
typedef struct _mp_opcode_t {