mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* class.c (class_alloc): Strat from age == 2.
Class and Module objects can be living long life. * iseq.c: Same for ISeq objects. * gc.c (RVALUE_AGE_RESET): added. * gc.c (newobj_of): allow to generate (age != 0) objects. * gc.c (rb_copy_wb_protected_attribute): reset age for wb unprotected objects. * include/ruby/ruby.h: add RUBY_TYPED_PROMOTED1 as an unrecommended flag. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48771 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
3977132bbb
commit
1b6aa03eb9
5 changed files with 38 additions and 7 deletions
17
ChangeLog
17
ChangeLog
|
@ -1,3 +1,20 @@
|
||||||
|
Thu Dec 11 19:06:01 2014 Koichi Sasada <ko1@atdot.net>
|
||||||
|
|
||||||
|
* class.c (class_alloc): Strat from age == 2.
|
||||||
|
Class and Module objects can be living long life.
|
||||||
|
|
||||||
|
* iseq.c: Same for ISeq objects.
|
||||||
|
|
||||||
|
* gc.c (RVALUE_AGE_RESET): added.
|
||||||
|
|
||||||
|
* gc.c (newobj_of): allow to generate (age != 0) objects.
|
||||||
|
|
||||||
|
* gc.c (rb_copy_wb_protected_attribute): reset age for wb unprotected
|
||||||
|
objects.
|
||||||
|
|
||||||
|
* include/ruby/ruby.h: add RUBY_TYPED_PROMOTED1 as an unrecommended
|
||||||
|
flag.
|
||||||
|
|
||||||
Thu Dec 11 05:37:52 2014 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
|
Thu Dec 11 05:37:52 2014 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
|
||||||
|
|
||||||
* lib/prime.rb: Remove useless loop and block capture.
|
* lib/prime.rb: Remove useless loop and block capture.
|
||||||
|
|
2
class.c
2
class.c
|
@ -150,7 +150,7 @@ rb_class_detach_module_subclasses(VALUE klass)
|
||||||
static VALUE
|
static VALUE
|
||||||
class_alloc(VALUE flags, VALUE klass)
|
class_alloc(VALUE flags, VALUE klass)
|
||||||
{
|
{
|
||||||
NEWOBJ_OF(obj, struct RClass, klass, (flags & T_MASK) | (RGENGC_WB_PROTECTED_CLASS ? FL_WB_PROTECTED : 0));
|
NEWOBJ_OF(obj, struct RClass, klass, (flags & T_MASK) | FL_PROMOTED1 /* start from age == 2 */ | (RGENGC_WB_PROTECTED_CLASS ? FL_WB_PROTECTED : 0));
|
||||||
obj->ptr = ALLOC(rb_classext_t);
|
obj->ptr = ALLOC(rb_classext_t);
|
||||||
RCLASS_IV_TBL(obj) = 0;
|
RCLASS_IV_TBL(obj) = 0;
|
||||||
RCLASS_CONST_TBL(obj) = 0;
|
RCLASS_CONST_TBL(obj) = 0;
|
||||||
|
|
21
gc.c
21
gc.c
|
@ -1151,14 +1151,18 @@ RVALUE_DEMOTE(rb_objspace_t *objspace, VALUE obj)
|
||||||
check_rvalue_consistency(obj);
|
check_rvalue_consistency(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
RVALUE_AGE_RESET_RAW(VALUE obj)
|
||||||
|
{
|
||||||
|
RBASIC(obj)->flags = RVALUE_FLAGS_AGE_SET(RBASIC(obj)->flags, 0);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
RVALUE_AGE_RESET(VALUE obj)
|
RVALUE_AGE_RESET(VALUE obj)
|
||||||
{
|
{
|
||||||
check_rvalue_consistency(obj);
|
check_rvalue_consistency(obj);
|
||||||
if (RGENGC_CHECK_MODE) assert(!RVALUE_OLD_P(obj));
|
if (RGENGC_CHECK_MODE) assert(!RVALUE_OLD_P(obj));
|
||||||
|
RVALUE_AGE_RESET_RAW(obj);
|
||||||
RBASIC(obj)->flags = RVALUE_FLAGS_AGE_SET(RBASIC(obj)->flags, 0);
|
|
||||||
|
|
||||||
check_rvalue_consistency(obj);
|
check_rvalue_consistency(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1653,7 +1657,13 @@ newobj_of(VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3)
|
||||||
assert(RVALUE_MARKING(obj) == FALSE);
|
assert(RVALUE_MARKING(obj) == FALSE);
|
||||||
assert(RVALUE_OLD_P(obj) == FALSE);
|
assert(RVALUE_OLD_P(obj) == FALSE);
|
||||||
assert(RVALUE_WB_UNPROTECTED(obj) == FALSE);
|
assert(RVALUE_WB_UNPROTECTED(obj) == FALSE);
|
||||||
if (RVALUE_AGE(obj) > 0) rb_bug("newobj: %s of age (%d) > 0.", obj_info(obj), RVALUE_AGE(obj));
|
|
||||||
|
if (flags & FL_PROMOTED1) {
|
||||||
|
if (RVALUE_AGE(obj) != 2) rb_bug("newobj: %s of age (%d) != 2.", obj_info(obj), RVALUE_AGE(obj));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (RVALUE_AGE(obj) > 0) rb_bug("newobj: %s of age (%d) > 0.", obj_info(obj), RVALUE_AGE(obj));
|
||||||
|
}
|
||||||
if (rgengc_remembered(objspace, (VALUE)obj)) rb_bug("newobj: %s is remembered.", obj_info(obj));
|
if (rgengc_remembered(objspace, (VALUE)obj)) rb_bug("newobj: %s is remembered.", obj_info(obj));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -5556,7 +5566,10 @@ rb_copy_wb_protected_attribute(VALUE dest, VALUE obj)
|
||||||
#if USE_RGENGC
|
#if USE_RGENGC
|
||||||
if (RVALUE_WB_UNPROTECTED(obj)) {
|
if (RVALUE_WB_UNPROTECTED(obj)) {
|
||||||
MARK_IN_BITMAP(GET_HEAP_WB_UNPROTECTED_BITS(dest), dest);
|
MARK_IN_BITMAP(GET_HEAP_WB_UNPROTECTED_BITS(dest), dest);
|
||||||
|
RVALUE_AGE_RESET_RAW(dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
check_rvalue_consistency(dest);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1019,7 +1019,8 @@ void *rb_check_typeddata(VALUE, const rb_data_type_t *);
|
||||||
|
|
||||||
/* bits for rb_data_type_struct::flags */
|
/* bits for rb_data_type_struct::flags */
|
||||||
#define RUBY_TYPED_FREE_IMMEDIATELY 1 /* TYPE field */
|
#define RUBY_TYPED_FREE_IMMEDIATELY 1 /* TYPE field */
|
||||||
#define RUBY_TYPED_WB_PROTECTED FL_WB_PROTECTED
|
#define RUBY_TYPED_WB_PROTECTED FL_WB_PROTECTED /* THIS FLAG DEPENDS ON Ruby version */
|
||||||
|
#define RUBY_TYPED_PROMOTED1 FL_PROMOTED1 /* THIS FLAG DEPENDS ON Ruby version */
|
||||||
|
|
||||||
#define Data_Wrap_Struct(klass,mark,free,sval)\
|
#define Data_Wrap_Struct(klass,mark,free,sval)\
|
||||||
rb_data_object_alloc((klass),(sval),(RUBY_DATA_FUNC)(mark),(RUBY_DATA_FUNC)(free))
|
rb_data_object_alloc((klass),(sval),(RUBY_DATA_FUNC)(mark),(RUBY_DATA_FUNC)(free))
|
||||||
|
|
2
iseq.c
2
iseq.c
|
@ -182,7 +182,7 @@ static const rb_data_type_t iseq_data_type = {
|
||||||
iseq_memsize,
|
iseq_memsize,
|
||||||
}, /* functions */
|
}, /* functions */
|
||||||
0, 0,
|
0, 0,
|
||||||
RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED
|
RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_PROMOTED1 /* start from age == 2 */ | RUBY_TYPED_WB_PROTECTED
|
||||||
};
|
};
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue