diff options
author | Peter Zhu <[email protected]> | 2021-08-02 14:22:47 -0400 |
---|---|---|
committer | Peter Zhu <[email protected]> | 2021-10-25 13:26:23 -0400 |
commit | 6374be5a8188ff5ed2c70b9f1d76672c87a0eda7 (patch) | |
tree | 6ac8436f9e29bede5bf7ad167625c47082e5291e /internal/gc.h | |
parent | 46b66eb9e8e6de2d5750591e532310e8f8599d90 (diff) |
[Feature #18239] Refactor RVARGC alloc functions
The allocation functions no longer assume that one RVALUE needs to be
allocated.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/4933
Diffstat (limited to 'internal/gc.h')
-rw-r--r-- | internal/gc.h | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/internal/gc.h b/internal/gc.h index 36ed147bd3..233af1ce2c 100644 --- a/internal/gc.h +++ b/internal/gc.h @@ -28,16 +28,18 @@ struct rb_objspace; /* in vm_core.h */ # undef RB_OBJ_WRITE #endif +#define RVALUE_SIZE (sizeof(struct RBasic) + sizeof(VALUE[RBIMPL_RVALUE_EMBED_LEN_MAX])) + /* optimized version of NEWOBJ() */ #define RB_NEWOBJ_OF(var, T, c, f) \ T *(var) = (T *)(((f) & FL_WB_PROTECTED) ? \ - rb_wb_protected_newobj_of((c), (f) & ~FL_WB_PROTECTED, 0) : \ - rb_wb_unprotected_newobj_of((c), (f), 0)) + rb_wb_protected_newobj_of((c), (f) & ~FL_WB_PROTECTED, RVALUE_SIZE) : \ + rb_wb_unprotected_newobj_of((c), (f), RVALUE_SIZE)) #define RB_EC_NEWOBJ_OF(ec, var, T, c, f) \ T *(var) = (T *)(((f) & FL_WB_PROTECTED) ? \ - rb_ec_wb_protected_newobj_of((ec), (c), (f) & ~FL_WB_PROTECTED, 0) : \ - rb_wb_unprotected_newobj_of((c), (f), 0)) + rb_ec_wb_protected_newobj_of((ec), (c), (f) & ~FL_WB_PROTECTED, RVALUE_SIZE) : \ + rb_wb_unprotected_newobj_of((c), (f), RVALUE_SIZE)) #define RB_RVARGC_NEWOBJ_OF(var, T, c, f, s) \ T *(var) = (T *)(((f) & FL_WB_PROTECTED) ? \ @@ -100,7 +102,6 @@ static inline void *ruby_sized_xrealloc2_inlined(void *ptr, size_t new_count, si static inline void ruby_sized_xfree_inlined(void *ptr, size_t size); VALUE rb_class_allocate_instance(VALUE klass); void rb_gc_ractor_newobj_cache_clear(rb_ractor_newobj_cache_t *newobj_cache); -void *rb_gc_rvargc_object_data(VALUE obj); RUBY_SYMBOL_EXPORT_BEGIN /* gc.c (export) */ |