[Feature #19474] Refactor NEWOBJ macros
NEWOBJ_OF is now our canonical newobj macro. It takes an optional ec
This commit is contained in:
parent
879cda98a4
commit
026321c5b9
Notes:
git
2023-04-06 10:07:41 +00:00
20
array.c
20
array.c
@ -778,9 +778,9 @@ ary_alloc_embed(VALUE klass, long capa)
|
|||||||
{
|
{
|
||||||
size_t size = ary_embed_size(capa);
|
size_t size = ary_embed_size(capa);
|
||||||
assert(rb_gc_size_allocatable_p(size));
|
assert(rb_gc_size_allocatable_p(size));
|
||||||
RVARGC_NEWOBJ_OF(ary, struct RArray, klass,
|
NEWOBJ_OF(ary, struct RArray, klass,
|
||||||
T_ARRAY | RARRAY_EMBED_FLAG | (RGENGC_WB_PROTECTED_ARRAY ? FL_WB_PROTECTED : 0),
|
T_ARRAY | RARRAY_EMBED_FLAG | (RGENGC_WB_PROTECTED_ARRAY ? FL_WB_PROTECTED : 0),
|
||||||
size);
|
size, 0);
|
||||||
/* Created array is:
|
/* Created array is:
|
||||||
* FL_SET_EMBED((VALUE)ary);
|
* FL_SET_EMBED((VALUE)ary);
|
||||||
* ARY_SET_EMBED_LEN((VALUE)ary, 0);
|
* ARY_SET_EMBED_LEN((VALUE)ary, 0);
|
||||||
@ -791,9 +791,9 @@ ary_alloc_embed(VALUE klass, long capa)
|
|||||||
static VALUE
|
static VALUE
|
||||||
ary_alloc_heap(VALUE klass)
|
ary_alloc_heap(VALUE klass)
|
||||||
{
|
{
|
||||||
RVARGC_NEWOBJ_OF(ary, struct RArray, klass,
|
NEWOBJ_OF(ary, struct RArray, klass,
|
||||||
T_ARRAY | (RGENGC_WB_PROTECTED_ARRAY ? FL_WB_PROTECTED : 0),
|
T_ARRAY | (RGENGC_WB_PROTECTED_ARRAY ? FL_WB_PROTECTED : 0),
|
||||||
sizeof(struct RArray));
|
sizeof(struct RArray), 0);
|
||||||
return (VALUE)ary;
|
return (VALUE)ary;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -890,9 +890,9 @@ ec_ary_alloc_embed(rb_execution_context_t *ec, VALUE klass, long capa)
|
|||||||
{
|
{
|
||||||
size_t size = ary_embed_size(capa);
|
size_t size = ary_embed_size(capa);
|
||||||
assert(rb_gc_size_allocatable_p(size));
|
assert(rb_gc_size_allocatable_p(size));
|
||||||
RB_RVARGC_EC_NEWOBJ_OF(ec, ary, struct RArray, klass,
|
NEWOBJ_OF(ary, struct RArray, klass,
|
||||||
T_ARRAY | RARRAY_EMBED_FLAG | (RGENGC_WB_PROTECTED_ARRAY ? FL_WB_PROTECTED : 0),
|
T_ARRAY | RARRAY_EMBED_FLAG | (RGENGC_WB_PROTECTED_ARRAY ? FL_WB_PROTECTED : 0),
|
||||||
size);
|
size, ec);
|
||||||
/* Created array is:
|
/* Created array is:
|
||||||
* FL_SET_EMBED((VALUE)ary);
|
* FL_SET_EMBED((VALUE)ary);
|
||||||
* ARY_SET_EMBED_LEN((VALUE)ary, 0);
|
* ARY_SET_EMBED_LEN((VALUE)ary, 0);
|
||||||
@ -903,9 +903,9 @@ ec_ary_alloc_embed(rb_execution_context_t *ec, VALUE klass, long capa)
|
|||||||
static VALUE
|
static VALUE
|
||||||
ec_ary_alloc_heap(rb_execution_context_t *ec, VALUE klass)
|
ec_ary_alloc_heap(rb_execution_context_t *ec, VALUE klass)
|
||||||
{
|
{
|
||||||
RB_RVARGC_EC_NEWOBJ_OF(ec, ary, struct RArray, klass,
|
NEWOBJ_OF(ary, struct RArray, klass,
|
||||||
T_ARRAY | (RGENGC_WB_PROTECTED_ARRAY ? FL_WB_PROTECTED : 0),
|
T_ARRAY | (RGENGC_WB_PROTECTED_ARRAY ? FL_WB_PROTECTED : 0),
|
||||||
sizeof(struct RArray));
|
sizeof(struct RArray), ec);
|
||||||
return (VALUE)ary;
|
return (VALUE)ary;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
3
bignum.c
3
bignum.c
@ -3023,7 +3023,8 @@ rb_big_resize(VALUE big, size_t len)
|
|||||||
static VALUE
|
static VALUE
|
||||||
bignew_1(VALUE klass, size_t len, int sign)
|
bignew_1(VALUE klass, size_t len, int sign)
|
||||||
{
|
{
|
||||||
NEWOBJ_OF(big, struct RBignum, klass, T_BIGNUM | (RGENGC_WB_PROTECTED_BIGNUM ? FL_WB_PROTECTED : 0));
|
NEWOBJ_OF(big, struct RBignum, klass,
|
||||||
|
T_BIGNUM | (RGENGC_WB_PROTECTED_BIGNUM ? FL_WB_PROTECTED : 0), sizeof(struct RBignum), 0);
|
||||||
VALUE bigv = (VALUE)big;
|
VALUE bigv = (VALUE)big;
|
||||||
BIGNUM_SET_SIGN(bigv, sign);
|
BIGNUM_SET_SIGN(bigv, sign);
|
||||||
if (len <= BIGNUM_EMBED_LEN_MAX) {
|
if (len <= BIGNUM_EMBED_LEN_MAX) {
|
||||||
|
2
class.c
2
class.c
@ -202,7 +202,7 @@ class_alloc(VALUE flags, VALUE klass)
|
|||||||
flags &= T_MASK;
|
flags &= T_MASK;
|
||||||
flags |= FL_PROMOTED1 /* start from age == 2 */;
|
flags |= FL_PROMOTED1 /* start from age == 2 */;
|
||||||
if (RGENGC_WB_PROTECTED_CLASS) flags |= FL_WB_PROTECTED;
|
if (RGENGC_WB_PROTECTED_CLASS) flags |= FL_WB_PROTECTED;
|
||||||
RVARGC_NEWOBJ_OF(obj, struct RClass, klass, flags, alloc_size);
|
NEWOBJ_OF(obj, struct RClass, klass, flags, alloc_size, 0);
|
||||||
|
|
||||||
#if RCLASS_EXT_EMBEDDED
|
#if RCLASS_EXT_EMBEDDED
|
||||||
memset(RCLASS_EXT(obj), 0, sizeof(rb_classext_t));
|
memset(RCLASS_EXT(obj), 0, sizeof(rb_classext_t));
|
||||||
|
@ -391,7 +391,8 @@ k_numeric_p(VALUE x)
|
|||||||
inline static VALUE
|
inline static VALUE
|
||||||
nucomp_s_new_internal(VALUE klass, VALUE real, VALUE imag)
|
nucomp_s_new_internal(VALUE klass, VALUE real, VALUE imag)
|
||||||
{
|
{
|
||||||
NEWOBJ_OF(obj, struct RComplex, klass, T_COMPLEX | (RGENGC_WB_PROTECTED_COMPLEX ? FL_WB_PROTECTED : 0));
|
NEWOBJ_OF(obj, struct RComplex, klass,
|
||||||
|
T_COMPLEX | (RGENGC_WB_PROTECTED_COMPLEX ? FL_WB_PROTECTED : 0), sizeof(struct RComplex), 0);
|
||||||
|
|
||||||
RCOMPLEX_SET_REAL(obj, real);
|
RCOMPLEX_SET_REAL(obj, real);
|
||||||
RCOMPLEX_SET_IMAG(obj, imag);
|
RCOMPLEX_SET_IMAG(obj, imag);
|
||||||
|
9
gc.c
9
gc.c
@ -2909,14 +2909,7 @@ rb_wb_unprotected_newobj_of(VALUE klass, VALUE flags, size_t size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
VALUE
|
VALUE
|
||||||
rb_wb_protected_newobj_of(VALUE klass, VALUE flags, size_t size)
|
rb_wb_protected_newobj_of(rb_execution_context_t *ec, VALUE klass, VALUE flags, size_t size)
|
||||||
{
|
|
||||||
GC_ASSERT((flags & FL_WB_PROTECTED) == 0);
|
|
||||||
return newobj_of(GET_RACTOR(), klass, flags, 0, 0, 0, TRUE, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
VALUE
|
|
||||||
rb_ec_wb_protected_newobj_of(rb_execution_context_t *ec, VALUE klass, VALUE flags, size_t size)
|
|
||||||
{
|
{
|
||||||
GC_ASSERT((flags & FL_WB_PROTECTED) == 0);
|
GC_ASSERT((flags & FL_WB_PROTECTED) == 0);
|
||||||
return newobj_of(rb_ec_ractor_ptr(ec), klass, flags, 0, 0, 0, TRUE, size);
|
return newobj_of(rb_ec_ractor_ptr(ec), klass, flags, 0, 0, 0, TRUE, size);
|
||||||
|
2
hash.c
2
hash.c
@ -1498,7 +1498,7 @@ static VALUE
|
|||||||
hash_alloc_flags(VALUE klass, VALUE flags, VALUE ifnone)
|
hash_alloc_flags(VALUE klass, VALUE flags, VALUE ifnone)
|
||||||
{
|
{
|
||||||
const VALUE wb = (RGENGC_WB_PROTECTED_HASH ? FL_WB_PROTECTED : 0);
|
const VALUE wb = (RGENGC_WB_PROTECTED_HASH ? FL_WB_PROTECTED : 0);
|
||||||
NEWOBJ_OF(hash, struct RHash, klass, T_HASH | wb | flags);
|
NEWOBJ_OF(hash, struct RHash, klass, T_HASH | wb | flags, sizeof(struct RHash), 0);
|
||||||
|
|
||||||
RHASH_SET_IFNONE((VALUE)hash, ifnone);
|
RHASH_SET_IFNONE((VALUE)hash, ifnone);
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
#include "internal/compilers.h" /* for __has_attribute */
|
#include "internal/compilers.h" /* for __has_attribute */
|
||||||
#include "ruby/ruby.h" /* for rb_event_flag_t */
|
#include "ruby/ruby.h" /* for rb_event_flag_t */
|
||||||
|
#include "vm_core.h" /* for GET_EC() */
|
||||||
|
|
||||||
#if defined(__x86_64__) && !defined(_ILP32) && defined(__GNUC__)
|
#if defined(__x86_64__) && !defined(_ILP32) && defined(__GNUC__)
|
||||||
#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("movq\t%%rsp, %0" : "=r" (*(p)))
|
#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("movq\t%%rsp, %0" : "=r" (*(p)))
|
||||||
@ -132,23 +133,20 @@ struct rb_objspace; /* in vm_core.h */
|
|||||||
# undef RB_NEWOBJ_OF
|
# undef RB_NEWOBJ_OF
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define RB_RVARGC_NEWOBJ_OF(var, T, c, f, s) \
|
#define NEWOBJ_OF_0(var, T, c, f, s, ec) \
|
||||||
T *(var) = (T *)(((f) & FL_WB_PROTECTED) ? \
|
T *(var) = (T *)(((f) & FL_WB_PROTECTED) ? \
|
||||||
rb_wb_protected_newobj_of((c), (f) & ~FL_WB_PROTECTED, s) : \
|
rb_wb_protected_newobj_of(GET_EC(), (c), (f) & ~FL_WB_PROTECTED, s) : \
|
||||||
rb_wb_unprotected_newobj_of((c), (f), s))
|
rb_wb_unprotected_newobj_of((c), (f), s))
|
||||||
|
#define NEWOBJ_OF_ec(var, T, c, f, s, ec) \
|
||||||
|
T *(var) = (T *)(((f) & FL_WB_PROTECTED) ? \
|
||||||
|
rb_wb_protected_newobj_of((ec), (c), (f) & ~FL_WB_PROTECTED, s) : \
|
||||||
|
rb_wb_unprotected_newobj_of((c), (f), s))
|
||||||
|
|
||||||
#define RB_RVARGC_EC_NEWOBJ_OF(ec, var, T, c, f, s) \
|
#define NEWOBJ_OF(var, T, c, f, s, ec) \
|
||||||
T *(var) = (T *)(((f) & FL_WB_PROTECTED) ? \
|
NEWOBJ_OF_HELPER(ec)(var, T, c, f, s, ec)
|
||||||
rb_ec_wb_protected_newobj_of((ec), (c), (f) & ~FL_WB_PROTECTED, s) : \
|
|
||||||
rb_wb_unprotected_newobj_of((c), (f), s))
|
|
||||||
|
|
||||||
/* optimized version of NEWOBJ() */
|
#define NEWOBJ_OF_HELPER(ec) NEWOBJ_OF_ ## ec
|
||||||
#define RB_NEWOBJ_OF(var, T, c, f) RB_RVARGC_NEWOBJ_OF(var, T, c, f, RVALUE_SIZE)
|
|
||||||
|
|
||||||
#define RB_EC_NEWOBJ_OF(ec, var, T, c, f) RB_RVARGC_EC_NEWOBJ_OF(ec, var, T, c, f, RVALUE_SIZE)
|
|
||||||
|
|
||||||
#define NEWOBJ_OF(var, T, c, f) RB_NEWOBJ_OF((var), T, (c), (f))
|
|
||||||
#define RVARGC_NEWOBJ_OF(var, T, c, f, s) RB_RVARGC_NEWOBJ_OF((var), T, (c), (f), (s))
|
|
||||||
#define RB_OBJ_GC_FLAGS_MAX 6 /* used in ext/objspace */
|
#define RB_OBJ_GC_FLAGS_MAX 6 /* used in ext/objspace */
|
||||||
|
|
||||||
#ifndef USE_UNALIGNED_MEMBER_ACCESS
|
#ifndef USE_UNALIGNED_MEMBER_ACCESS
|
||||||
@ -272,9 +270,8 @@ VALUE rb_gc_disable_no_rest(void);
|
|||||||
|
|
||||||
/* gc.c (export) */
|
/* gc.c (export) */
|
||||||
const char *rb_objspace_data_type_name(VALUE obj);
|
const char *rb_objspace_data_type_name(VALUE obj);
|
||||||
VALUE rb_wb_protected_newobj_of(VALUE, VALUE, size_t);
|
VALUE rb_wb_protected_newobj_of(struct rb_execution_context_struct *, VALUE, VALUE, size_t);
|
||||||
VALUE rb_wb_unprotected_newobj_of(VALUE, VALUE, size_t);
|
VALUE rb_wb_unprotected_newobj_of(VALUE, VALUE, size_t);
|
||||||
VALUE rb_ec_wb_protected_newobj_of(struct rb_execution_context_struct *ec, VALUE klass, VALUE flags, size_t);
|
|
||||||
size_t rb_obj_memsize_of(VALUE);
|
size_t rb_obj_memsize_of(VALUE);
|
||||||
void rb_gc_verify_internal_consistency(void);
|
void rb_gc_verify_internal_consistency(void);
|
||||||
size_t rb_obj_gc_flags(VALUE, ID[], size_t);
|
size_t rb_obj_gc_flags(VALUE, ID[], size_t);
|
||||||
|
2
io.c
2
io.c
@ -1091,7 +1091,7 @@ ruby_dup(int orig)
|
|||||||
static VALUE
|
static VALUE
|
||||||
io_alloc(VALUE klass)
|
io_alloc(VALUE klass)
|
||||||
{
|
{
|
||||||
NEWOBJ_OF(io, struct RFile, klass, T_FILE);
|
NEWOBJ_OF(io, struct RFile, klass, T_FILE, sizeof(struct RFile), 0);
|
||||||
|
|
||||||
io->fptr = 0;
|
io->fptr = 0;
|
||||||
|
|
||||||
|
@ -1018,7 +1018,7 @@ num_negative_p(VALUE num)
|
|||||||
VALUE
|
VALUE
|
||||||
rb_float_new_in_heap(double d)
|
rb_float_new_in_heap(double d)
|
||||||
{
|
{
|
||||||
NEWOBJ_OF(flt, struct RFloat, rb_cFloat, T_FLOAT | (RGENGC_WB_PROTECTED_FLOAT ? FL_WB_PROTECTED : 0));
|
NEWOBJ_OF(flt, struct RFloat, rb_cFloat, T_FLOAT | (RGENGC_WB_PROTECTED_FLOAT ? FL_WB_PROTECTED : 0), sizeof(struct RFloat), 0);
|
||||||
|
|
||||||
#if SIZEOF_DOUBLE <= SIZEOF_VALUE
|
#if SIZEOF_DOUBLE <= SIZEOF_VALUE
|
||||||
flt->float_value = d;
|
flt->float_value = d;
|
||||||
|
@ -413,7 +413,8 @@ f_lcm(VALUE x, VALUE y)
|
|||||||
inline static VALUE
|
inline static VALUE
|
||||||
nurat_s_new_internal(VALUE klass, VALUE num, VALUE den)
|
nurat_s_new_internal(VALUE klass, VALUE num, VALUE den)
|
||||||
{
|
{
|
||||||
NEWOBJ_OF(obj, struct RRational, klass, T_RATIONAL | (RGENGC_WB_PROTECTED_RATIONAL ? FL_WB_PROTECTED : 0));
|
NEWOBJ_OF(obj, struct RRational, klass, T_RATIONAL | (RGENGC_WB_PROTECTED_RATIONAL ? FL_WB_PROTECTED : 0),
|
||||||
|
sizeof(struct RRational), 0);
|
||||||
|
|
||||||
RATIONAL_SET_NUM((VALUE)obj, num);
|
RATIONAL_SET_NUM((VALUE)obj, num);
|
||||||
RATIONAL_SET_DEN((VALUE)obj, den);
|
RATIONAL_SET_DEN((VALUE)obj, den);
|
||||||
|
4
re.c
4
re.c
@ -961,7 +961,7 @@ VALUE rb_cMatch;
|
|||||||
static VALUE
|
static VALUE
|
||||||
match_alloc(VALUE klass)
|
match_alloc(VALUE klass)
|
||||||
{
|
{
|
||||||
NEWOBJ_OF(match, struct RMatch, klass, T_MATCH | (RGENGC_WB_PROTECTED_MATCH ? FL_WB_PROTECTED : 0));
|
NEWOBJ_OF(match, struct RMatch, klass, T_MATCH | (RGENGC_WB_PROTECTED_MATCH ? FL_WB_PROTECTED : 0), sizeof(struct RMatch), 0);
|
||||||
|
|
||||||
match->str = Qfalse;
|
match->str = Qfalse;
|
||||||
match->rmatch = 0;
|
match->rmatch = 0;
|
||||||
@ -3270,7 +3270,7 @@ rb_reg_initialize_str(VALUE obj, VALUE str, int options, onig_errmsg_buffer err,
|
|||||||
static VALUE
|
static VALUE
|
||||||
rb_reg_s_alloc(VALUE klass)
|
rb_reg_s_alloc(VALUE klass)
|
||||||
{
|
{
|
||||||
NEWOBJ_OF(re, struct RRegexp, klass, T_REGEXP | (RGENGC_WB_PROTECTED_REGEXP ? FL_WB_PROTECTED : 0));
|
NEWOBJ_OF(re, struct RRegexp, klass, T_REGEXP | (RGENGC_WB_PROTECTED_REGEXP ? FL_WB_PROTECTED : 0), sizeof(struct RRegexp), 0);
|
||||||
|
|
||||||
re->ptr = 0;
|
re->ptr = 0;
|
||||||
RB_OBJ_WRITE(re, &re->src, 0);
|
RB_OBJ_WRITE(re, &re->src, 0);
|
||||||
|
2
shape.c
2
shape.c
@ -777,7 +777,9 @@ rb_shape_find_by_id(VALUE mod, VALUE id)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_MMAP
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
Init_default_shapes(void)
|
Init_default_shapes(void)
|
||||||
|
16
string.c
16
string.c
@ -872,8 +872,8 @@ str_alloc_embed(VALUE klass, size_t capa)
|
|||||||
assert(size > 0);
|
assert(size > 0);
|
||||||
assert(rb_gc_size_allocatable_p(size));
|
assert(rb_gc_size_allocatable_p(size));
|
||||||
|
|
||||||
RVARGC_NEWOBJ_OF(str, struct RString, klass,
|
NEWOBJ_OF(str, struct RString, klass,
|
||||||
T_STRING | (RGENGC_WB_PROTECTED_STRING ? FL_WB_PROTECTED : 0), size);
|
T_STRING | (RGENGC_WB_PROTECTED_STRING ? FL_WB_PROTECTED : 0), size, 0);
|
||||||
|
|
||||||
return (VALUE)str;
|
return (VALUE)str;
|
||||||
}
|
}
|
||||||
@ -881,8 +881,8 @@ str_alloc_embed(VALUE klass, size_t capa)
|
|||||||
static inline VALUE
|
static inline VALUE
|
||||||
str_alloc_heap(VALUE klass)
|
str_alloc_heap(VALUE klass)
|
||||||
{
|
{
|
||||||
RVARGC_NEWOBJ_OF(str, struct RString, klass,
|
NEWOBJ_OF(str, struct RString, klass,
|
||||||
T_STRING | STR_NOEMBED | (RGENGC_WB_PROTECTED_STRING ? FL_WB_PROTECTED : 0), sizeof(struct RString));
|
T_STRING | STR_NOEMBED | (RGENGC_WB_PROTECTED_STRING ? FL_WB_PROTECTED : 0), sizeof(struct RString), 0);
|
||||||
|
|
||||||
return (VALUE)str;
|
return (VALUE)str;
|
||||||
}
|
}
|
||||||
@ -1695,8 +1695,8 @@ ec_str_alloc_embed(struct rb_execution_context_struct *ec, VALUE klass, size_t c
|
|||||||
assert(size > 0);
|
assert(size > 0);
|
||||||
assert(rb_gc_size_allocatable_p(size));
|
assert(rb_gc_size_allocatable_p(size));
|
||||||
|
|
||||||
RB_RVARGC_EC_NEWOBJ_OF(ec, str, struct RString, klass,
|
NEWOBJ_OF(str, struct RString, klass,
|
||||||
T_STRING | (RGENGC_WB_PROTECTED_STRING ? FL_WB_PROTECTED : 0), size);
|
T_STRING | (RGENGC_WB_PROTECTED_STRING ? FL_WB_PROTECTED : 0), size, ec);
|
||||||
|
|
||||||
return (VALUE)str;
|
return (VALUE)str;
|
||||||
}
|
}
|
||||||
@ -1704,8 +1704,8 @@ ec_str_alloc_embed(struct rb_execution_context_struct *ec, VALUE klass, size_t c
|
|||||||
static inline VALUE
|
static inline VALUE
|
||||||
ec_str_alloc_heap(struct rb_execution_context_struct *ec, VALUE klass)
|
ec_str_alloc_heap(struct rb_execution_context_struct *ec, VALUE klass)
|
||||||
{
|
{
|
||||||
RB_RVARGC_EC_NEWOBJ_OF(ec, str, struct RString, klass,
|
NEWOBJ_OF(str, struct RString, klass,
|
||||||
T_STRING | STR_NOEMBED | (RGENGC_WB_PROTECTED_STRING ? FL_WB_PROTECTED : 0), sizeof(struct RString));
|
T_STRING | STR_NOEMBED | (RGENGC_WB_PROTECTED_STRING ? FL_WB_PROTECTED : 0), sizeof(struct RString), ec);
|
||||||
|
|
||||||
return (VALUE)str;
|
return (VALUE)str;
|
||||||
}
|
}
|
||||||
|
2
struct.c
2
struct.c
@ -839,7 +839,7 @@ static VALUE
|
|||||||
struct_alloc(VALUE klass)
|
struct_alloc(VALUE klass)
|
||||||
{
|
{
|
||||||
long n;
|
long n;
|
||||||
NEWOBJ_OF(st, struct RStruct, klass, T_STRUCT | (RGENGC_WB_PROTECTED_STRUCT ? FL_WB_PROTECTED : 0));
|
NEWOBJ_OF(st, struct RStruct, klass, T_STRUCT | (RGENGC_WB_PROTECTED_STRUCT ? FL_WB_PROTECTED : 0), sizeof(struct RStruct), 0);
|
||||||
|
|
||||||
n = num_members(klass);
|
n = num_members(klass);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user