Skip to content

Commit 791acc5

Browse files
committed
Revert "gc.c: Pass shape_id to newobj_init"
This reverts commit 228d13f. This commit makes default.c and mmtk.c depend on shape.h, which prevents them from building independently.
1 parent 65995c2 commit 791acc5

File tree

5 files changed

+25
-29
lines changed

5 files changed

+25
-29
lines changed

gc.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -622,7 +622,7 @@ typedef struct gc_function_map {
622622
void (*stress_set)(void *objspace_ptr, VALUE flag);
623623
VALUE (*stress_get)(void *objspace_ptr);
624624
// Object allocation
625-
VALUE (*new_obj)(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags, shape_id_t shape_id, bool wb_protected, size_t alloc_size);
625+
VALUE (*new_obj)(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags, bool wb_protected, size_t alloc_size);
626626
size_t (*obj_slot_size)(VALUE obj);
627627
size_t (*heap_id_for_size)(void *objspace_ptr, size_t size);
628628
bool (*size_allocatable_p)(size_t size);
@@ -993,7 +993,8 @@ gc_validate_pc(VALUE obj)
993993
static inline VALUE
994994
newobj_of(rb_ractor_t *cr, VALUE klass, VALUE flags, shape_id_t shape_id, bool wb_protected, size_t size)
995995
{
996-
VALUE obj = rb_gc_impl_new_obj(rb_gc_get_objspace(), cr->newobj_cache, klass, flags, shape_id, wb_protected, size);
996+
VALUE obj = rb_gc_impl_new_obj(rb_gc_get_objspace(), cr->newobj_cache, klass, flags, wb_protected, size);
997+
RBASIC_SET_SHAPE_ID_NO_CHECKS(obj, shape_id);
997998

998999
gc_validate_pc(obj);
9991000

gc/default/default.c

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
#include "darray.h"
3333
#include "gc/gc.h"
3434
#include "gc/gc_impl.h"
35-
#include "shape.h"
3635

3736
#ifndef BUILDING_MODULAR_GC
3837
# include "probes.h"
@@ -2148,13 +2147,15 @@ rb_gc_impl_source_location_cstr(int *ptr)
21482147
#endif
21492148

21502149
static inline VALUE
2151-
newobj_init(VALUE klass, VALUE flags, shape_id_t shape_id, int wb_protected, rb_objspace_t *objspace, VALUE obj)
2150+
newobj_init(VALUE klass, VALUE flags, int wb_protected, rb_objspace_t *objspace, VALUE obj)
21522151
{
21532152
GC_ASSERT(BUILTIN_TYPE(obj) == T_NONE);
21542153
GC_ASSERT((flags & FL_WB_PROTECTED) == 0);
21552154
RBASIC(obj)->flags = flags;
21562155
*((VALUE *)&RBASIC(obj)->klass) = klass;
2157-
RBASIC_SET_SHAPE_ID_NO_CHECKS(obj, shape_id);
2156+
#if RBASIC_SHAPE_ID_FIELD
2157+
RBASIC(obj)->shape_id = 0;
2158+
#endif
21582159

21592160
int t = flags & RUBY_T_MASK;
21602161
if (t == T_CLASS || t == T_MODULE || t == T_ICLASS) {
@@ -2438,10 +2439,10 @@ newobj_alloc(rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t he
24382439
return obj;
24392440
}
24402441

2441-
ALWAYS_INLINE(static VALUE newobj_slowpath(VALUE klass, VALUE flags, shape_id_t shape_id, rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, int wb_protected, size_t heap_idx));
2442+
ALWAYS_INLINE(static VALUE newobj_slowpath(VALUE klass, VALUE flags, rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, int wb_protected, size_t heap_idx));
24422443

24432444
static inline VALUE
2444-
newobj_slowpath(VALUE klass, VALUE flags, shape_id_t shape_id, rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, int wb_protected, size_t heap_idx)
2445+
newobj_slowpath(VALUE klass, VALUE flags, rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, int wb_protected, size_t heap_idx)
24452446
{
24462447
VALUE obj;
24472448
unsigned int lev;
@@ -2466,32 +2467,32 @@ newobj_slowpath(VALUE klass, VALUE flags, shape_id_t shape_id, rb_objspace_t *ob
24662467
}
24672468

24682469
obj = newobj_alloc(objspace, cache, heap_idx, true);
2469-
newobj_init(klass, flags, shape_id, wb_protected, objspace, obj);
2470+
newobj_init(klass, flags, wb_protected, objspace, obj);
24702471
}
24712472
RB_GC_CR_UNLOCK(lev);
24722473

24732474
return obj;
24742475
}
24752476

2476-
NOINLINE(static VALUE newobj_slowpath_wb_protected(VALUE klass, VALUE flags, shape_id_t shape_id,
2477+
NOINLINE(static VALUE newobj_slowpath_wb_protected(VALUE klass, VALUE flags,
24772478
rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t heap_idx));
2478-
NOINLINE(static VALUE newobj_slowpath_wb_unprotected(VALUE klass, VALUE flags, shape_id_t shape_id,
2479+
NOINLINE(static VALUE newobj_slowpath_wb_unprotected(VALUE klass, VALUE flags,
24792480
rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t heap_idx));
24802481

24812482
static VALUE
2482-
newobj_slowpath_wb_protected(VALUE klass, VALUE flags, shape_id_t shape_id, rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t heap_idx)
2483+
newobj_slowpath_wb_protected(VALUE klass, VALUE flags, rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t heap_idx)
24832484
{
2484-
return newobj_slowpath(klass, flags, shape_id, objspace, cache, TRUE, heap_idx);
2485+
return newobj_slowpath(klass, flags, objspace, cache, TRUE, heap_idx);
24852486
}
24862487

24872488
static VALUE
2488-
newobj_slowpath_wb_unprotected(VALUE klass, VALUE flags, shape_id_t shape_id, rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t heap_idx)
2489+
newobj_slowpath_wb_unprotected(VALUE klass, VALUE flags, rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t heap_idx)
24892490
{
2490-
return newobj_slowpath(klass, flags, shape_id, objspace, cache, FALSE, heap_idx);
2491+
return newobj_slowpath(klass, flags, objspace, cache, FALSE, heap_idx);
24912492
}
24922493

24932494
VALUE
2494-
rb_gc_impl_new_obj(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags, shape_id_t shape_id, bool wb_protected, size_t alloc_size)
2495+
rb_gc_impl_new_obj(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags, bool wb_protected, size_t alloc_size)
24952496
{
24962497
VALUE obj;
24972498
rb_objspace_t *objspace = objspace_ptr;
@@ -2512,14 +2513,14 @@ rb_gc_impl_new_obj(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags
25122513
if (!RB_UNLIKELY(during_gc || ruby_gc_stressful) &&
25132514
wb_protected) {
25142515
obj = newobj_alloc(objspace, cache, heap_idx, false);
2515-
newobj_init(klass, flags, shape_id, wb_protected, objspace, obj);
2516+
newobj_init(klass, flags, wb_protected, objspace, obj);
25162517
}
25172518
else {
25182519
RB_DEBUG_COUNTER_INC(obj_newobj_slowpath);
25192520

25202521
obj = wb_protected ?
2521-
newobj_slowpath_wb_protected(klass, flags, shape_id, objspace, cache, heap_idx) :
2522-
newobj_slowpath_wb_unprotected(klass, flags, shape_id, objspace, cache, heap_idx);
2522+
newobj_slowpath_wb_protected(klass, flags, objspace, cache, heap_idx) :
2523+
newobj_slowpath_wb_unprotected(klass, flags, objspace, cache, heap_idx);
25232524
}
25242525

25252526
return obj;

gc/gc_impl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ GC_IMPL_FN VALUE rb_gc_impl_stress_get(void *objspace_ptr);
5555
GC_IMPL_FN VALUE rb_gc_impl_config_get(void *objspace_ptr);
5656
GC_IMPL_FN void rb_gc_impl_config_set(void *objspace_ptr, VALUE hash);
5757
// Object allocation
58-
GC_IMPL_FN VALUE rb_gc_impl_new_obj(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags, uint32_t /* shape_id_t */ shape_id, bool wb_protected, size_t alloc_size);
58+
GC_IMPL_FN VALUE rb_gc_impl_new_obj(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags, bool wb_protected, size_t alloc_size);
5959
GC_IMPL_FN size_t rb_gc_impl_obj_slot_size(VALUE obj);
6060
GC_IMPL_FN size_t rb_gc_impl_heap_id_for_size(void *objspace_ptr, size_t size);
6161
GC_IMPL_FN bool rb_gc_impl_size_allocatable_p(size_t size);

gc/mmtk/mmtk.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
#include "gc/gc.h"
99
#include "gc/gc_impl.h"
10-
#include "shape.h"
1110
#include "gc/mmtk/mmtk.h"
1211

1312
#include "ccan/list/list.h"
@@ -604,7 +603,7 @@ rb_gc_impl_config_set(void *objspace_ptr, VALUE hash)
604603
// Object allocation
605604

606605
VALUE
607-
rb_gc_impl_new_obj(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags, shape_id_t shape_id, bool wb_protected, size_t alloc_size)
606+
rb_gc_impl_new_obj(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags, bool wb_protected, size_t alloc_size)
608607
{
609608
#define MMTK_ALLOCATION_SEMANTICS_DEFAULT 0
610609
struct objspace *objspace = objspace_ptr;
@@ -626,7 +625,7 @@ rb_gc_impl_new_obj(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags
626625
VALUE *alloc_obj = mmtk_alloc(ractor_cache->mutator, alloc_size + 8, MMTk_MIN_OBJ_ALIGN, 0, MMTK_ALLOCATION_SEMANTICS_DEFAULT);
627626
alloc_obj++;
628627
alloc_obj[-1] = alloc_size;
629-
alloc_obj[0] = RSHAPE_COMBINE_IN_FLAGS(flags, shape_id);;
628+
alloc_obj[0] = flags;
630629
alloc_obj[1] = klass;
631630

632631
mmtk_post_alloc(ractor_cache->mutator, (void*)alloc_obj, alloc_size + 8, MMTK_ALLOCATION_SEMANTICS_DEFAULT);

shape.h

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -162,20 +162,15 @@ RBASIC_SHAPE_ID_FOR_READ(VALUE obj)
162162
bool rb_shape_verify_consistency(VALUE obj, shape_id_t shape_id);
163163
#endif
164164

165-
static inline VALUE
166-
RSHAPE_COMBINE_IN_FLAGS(VALUE flags, shape_id_t shape_id)
167-
{
168-
return (flags &SHAPE_FLAG_MASK) | (((VALUE)shape_id) << SHAPE_FLAG_SHIFT);
169-
}
170-
171165
static inline void
172166
RBASIC_SET_SHAPE_ID_NO_CHECKS(VALUE obj, shape_id_t shape_id)
173167
{
174168
#if RBASIC_SHAPE_ID_FIELD
175169
RBASIC(obj)->shape_id = (VALUE)shape_id;
176170
#else
177171
// Object shapes are occupying top bits
178-
RBASIC(obj)->flags = RSHAPE_COMBINE_IN_FLAGS(RBASIC(obj)->flags, shape_id);
172+
RBASIC(obj)->flags &= SHAPE_FLAG_MASK;
173+
RBASIC(obj)->flags |= ((VALUE)(shape_id) << SHAPE_FLAG_SHIFT);
179174
#endif
180175
}
181176

0 commit comments

Comments
 (0)