diff --git a/shape.c b/shape.c index 352c8d97a7..eee1b08bba 100644 --- a/shape.c +++ b/shape.c @@ -383,10 +383,7 @@ rb_shape_each_shape_id(each_shape_callback callback, void *data) RUBY_FUNC_EXPORTED rb_shape_t * rb_shape_lookup(shape_id_t shape_id) { - uint32_t offset = (shape_id & SHAPE_ID_OFFSET_MASK); - RUBY_ASSERT(offset != INVALID_SHAPE_ID); - - return &GET_SHAPE_TREE()->shape_list[offset]; + return RSHAPE(shape_id); } RUBY_FUNC_EXPORTED shape_id_t diff --git a/shape.h b/shape.h index ac50e58f71..392d3c9175 100644 --- a/shape.h +++ b/shape.h @@ -92,7 +92,10 @@ typedef struct { redblack_node_t *shape_cache; unsigned int cache_size; } rb_shape_tree_t; + +RUBY_SYMBOL_EXPORT_BEGIN RUBY_EXTERN rb_shape_tree_t *rb_shape_tree_ptr; +RUBY_SYMBOL_EXPORT_END union rb_attr_index_cache { uint64_t pack; @@ -149,7 +152,14 @@ RBASIC_SET_SHAPE_ID(VALUE obj, shape_id_t shape_id) #endif } -#define RSHAPE rb_shape_lookup +static inline rb_shape_t * +RSHAPE(shape_id_t shape_id) +{ + uint32_t offset = (shape_id & SHAPE_ID_OFFSET_MASK); + RUBY_ASSERT(offset != INVALID_SHAPE_ID); + + return &GET_SHAPE_TREE()->shape_list[offset]; +} int32_t rb_shape_id_offset(void);