aboutsummaryrefslogtreecommitdiffstats
path: root/internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'internal.h')
-rw-r--r--internal.h7
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);