summaryrefslogtreecommitdiff
path: root/shape.h
diff options
context:
space:
mode:
authorAaron Patterson <tenderlove@ruby-lang.org>2022-11-17 15:57:11 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2022-11-18 08:31:56 -0800
commit10788166e7e568fdcd0b748e8d5dab442dcdc7ef (patch)
treeee195186a3fed8333bc1875f66ddab0c85c3d7db /shape.h
parentf0ce1186620273a1182e6084559765143099eb88 (diff)
downloadruby-10788166e7e568fdcd0b748e8d5dab442dcdc7ef.tar.gz
Differentiate T_OBJECT shapes from other objects
We would like to differentiate types of objects via their shape. This commit adds a special T_OBJECT shape when we allocate an instance of T_OBJECT. This allows us to avoid testing whether an object is an instance of a T_OBJECT or not, we can just check the shape.
Diffstat (limited to 'shape.h')
-rw-r--r--shape.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/shape.h b/shape.h
index a2cbd7c482..9bbc5d35f9 100644
--- a/shape.h
+++ b/shape.h
@@ -42,7 +42,7 @@ typedef uint16_t shape_id_t;
# define ROOT_SHAPE_ID 0x0
// We use SIZE_POOL_COUNT number of shape IDs for transitions out of different size pools
// The next available shapd ID will be the SPECIAL_CONST_SHAPE_ID
-# define SPECIAL_CONST_SHAPE_ID SIZE_POOL_COUNT
+# define SPECIAL_CONST_SHAPE_ID (SIZE_POOL_COUNT * 2)
struct rb_shape {
struct rb_id_table * edges; // id_table from ID (ivar) to next shape
@@ -63,6 +63,7 @@ enum shape_type {
SHAPE_CAPACITY_CHANGE,
SHAPE_IVAR_UNDEF,
SHAPE_INITIAL_CAPACITY,
+ SHAPE_T_OBJECT,
};
#if SHAPE_IN_BASIC_FLAGS