diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-05-13 18:07:47 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-05-13 18:07:47 +0000 |
commit | 4f401816ffaf9b641cfbc8ad12203eedcdb527de (patch) | |
tree | c6a4a87c877c3cc69b308af6bcf72e4cefcdd86e /internal.h | |
parent | 7958c71ee57b0e394ed5e99f724161eacadf3056 (diff) | |
download | ruby-4f401816ffaf9b641cfbc8ad12203eedcdb527de.tar.gz |
* gc.c: support RGENGC. [ruby-trunk - Feature #8339]
See this ticet about RGENGC.
* gc.c: Add several flags:
* RGENGC_DEBUG: if >0, then prints debug information.
* RGENGC_CHECK_MODE: if >0, add assertions.
* RGENGC_PROFILE: if >0, add profiling features.
check GC.stat and GC::Profiler.
* include/ruby/ruby.h: disable RGENGC by default (USE_RGENGC == 0).
* array.c: add write barriers for T_ARRAY and generate sunny objects.
* include/ruby/ruby.h (RARRAY_PTR_USE): added. Use this macro if
you want to access raw pointers. If you modify the contents which
pointer pointed, then you need to care write barrier.
* bignum.c, marshal.c, random.c: generate T_BIGNUM sunny objects.
* complex.c, include/ruby/ruby.h: add write barriers for T_COMPLEX
and generate sunny objects.
* rational.c (nurat_s_new_internal), include/ruby/ruby.h: add write
barriers for T_RATIONAL and generate sunny objects.
* internal.h: add write barriers for RBasic::klass.
* numeric.c (rb_float_new_in_heap): generate sunny T_FLOAT objects.
* object.c (rb_class_allocate_instance), range.c:
generate sunny T_OBJECT objects.
* string.c: add write barriers for T_STRING and generate sunny objects.
* variable.c: add write barriers for ivars.
* vm_insnhelper.c (vm_setivar): ditto.
* include/ruby/ruby.h, debug.c: use two flags
FL_WB_PROTECTED and FL_OLDGEN.
* node.h (NODE_FL_CREF_PUSHED_BY_EVAL, NODE_FL_CREF_OMOD_SHARED):
move flag bits.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40703 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'internal.h')
-rw-r--r-- | internal.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/internal.h b/internal.h index 6f2091cdac..b0c36a89bb 100644 --- a/internal.h +++ b/internal.h @@ -81,7 +81,7 @@ RCLASS_SUPER(VALUE c) static inline VALUE RCLASS_SET_SUPER(VALUE a, VALUE b) { - RCLASS_EXT(a)->super = b; + OBJ_WRITE(a, &RCLASS_EXT(a)->super, b); return b; } @@ -239,7 +239,10 @@ struct RBasicRaw { #define RBASIC_CLEAR_CLASS(obj) (((struct RBasicRaw *)((VALUE)(obj)))->klass = 0) #define RBASIC_SET_CLASS_RAW(obj, cls) (((struct RBasicRaw *)((VALUE)(obj)))->klass = (cls)) -#define RBASIC_SET_CLASS(obj, cls) do {((struct RBasicRaw *)(obj))->klass = cls; } while (0) +#define RBASIC_SET_CLASS(obj, cls) do { \ + VALUE _obj_ = (obj); \ + OBJ_WRITE(_obj_, &((struct RBasicRaw *)(_obj_))->klass, cls); \ +} while (0) /* parse.y */ VALUE rb_parser_get_yydebug(VALUE); |