summaryrefslogtreecommitdiff
path: root/shape.h
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2023-03-24 18:07:02 +0900
committerAaron Patterson <aaron.patterson@gmail.com>2023-03-24 13:52:55 -0700
commit27b1a2992f7bebd9db0b0779cc7fe9b9faf5dca4 (patch)
tree4bb23a586e9bc63d9bcab6d30362f272e7e4ba5c /shape.h
parent6c60006de5cfd75f10a1b4a3d822e2de41d22db6 (diff)
downloadruby-27b1a2992f7bebd9db0b0779cc7fe9b9faf5dca4.tar.gz
Adjust SHAPE_BUFFER_SIZE with shape_id_t
On platforms where `shape_id_t` is 16-bits, 0x80000 is out of range of this type. ``` ../src/shape.c: In function ‘shape_alloc’: ../src/shape.c:129:18: warning: comparison is always false due to limited range of data type [-Wtype-limits] 129 | if (shape_id == MAX_SHAPE_ID) { | ^~ ```
Diffstat (limited to 'shape.h')
-rw-r--r--shape.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/shape.h b/shape.h
index 53c3cce48e..ab5f707383 100644
--- a/shape.h
+++ b/shape.h
@@ -3,7 +3,7 @@
#include "internal/gc.h"
-#if (SIZEOF_UINT64_T == SIZEOF_VALUE)
+#if (SIZEOF_UINT64_T <= SIZEOF_VALUE)
#define SIZEOF_SHAPE_T 4
#define SHAPE_IN_BASIC_FLAGS 1
typedef uint32_t attr_index_t;
@@ -18,9 +18,11 @@ typedef uint16_t attr_index_t;
#if SIZEOF_SHAPE_T == 4
typedef uint32_t shape_id_t;
# define SHAPE_ID_NUM_BITS 32
+# define SHAPE_BUFFER_SIZE 0x80000
#else
typedef uint16_t shape_id_t;
# define SHAPE_ID_NUM_BITS 16
+# define SHAPE_BUFFER_SIZE 0x8000
#endif
# define SHAPE_MASK (((uintptr_t)1 << SHAPE_ID_NUM_BITS) - 1)
@@ -28,8 +30,6 @@ typedef uint16_t shape_id_t;
# define SHAPE_FLAG_SHIFT ((SIZEOF_VALUE * 8) - SHAPE_ID_NUM_BITS)
-# define SHAPE_BUFFER_SIZE 0x80000
-
# define SHAPE_MAX_VARIATIONS 8
# define SHAPE_MAX_NUM_IVS 80