Feature #15833 » 0001-Name-RArray-member-to-count-reference-of-shared-root.patch
| array.c | ||
|---|---|---|
|
#define RARRAY_SHARED_ROOT_FLAG FL_USER5
|
||
|
#define ARY_SHARED_ROOT_P(ary) (FL_TEST((ary), RARRAY_SHARED_ROOT_FLAG))
|
||
|
#define ARY_SHARED_NUM(ary) \
|
||
|
(assert(ARY_SHARED_ROOT_P(ary)), RARRAY(ary)->as.heap.aux.capa)
|
||
|
(assert(ARY_SHARED_ROOT_P(ary)), RARRAY(ary)->as.heap.aux.shared_num)
|
||
|
#define ARY_SHARED_OCCUPIED(ary) (ARY_SHARED_NUM(ary) == 1)
|
||
|
#define ARY_SET_SHARED_NUM(ary, value) do { \
|
||
|
assert(ARY_SHARED_ROOT_P(ary)); \
|
||
|
RARRAY(ary)->as.heap.aux.capa = (value); \
|
||
|
RARRAY(ary)->as.heap.aux.shared_num = (value); \
|
||
|
} while (0)
|
||
|
#define FL_SET_SHARED_ROOT(ary) do { \
|
||
|
assert(!ARY_EMBED_P(ary)); \
|
||
| include/ruby/ruby.h | ||
|---|---|---|
|
union {
|
||
|
long capa;
|
||
|
VALUE shared;
|
||
|
long shared_num;
|
||
|
} aux;
|
||
|
const VALUE *ptr;
|
||
|
} heap;
|
||