diff options
Diffstat (limited to 'marshal.c')
-rw-r--r-- | marshal.c | 16 |
1 files changed, 10 insertions, 6 deletions
@@ -665,13 +665,20 @@ has_ivars(VALUE obj, VALUE encname, VALUE *ivobj) } static void +w_ivar_each(VALUE obj, st_index_t num, struct dump_call_arg *arg) +{ + struct w_ivar_arg ivarg = {arg, num}; + if (!num) return; + rb_ivar_foreach(obj, w_obj_each, (st_data_t)&ivarg); +} + +static void w_ivar(st_index_t num, VALUE ivobj, VALUE encname, struct dump_call_arg *arg) { w_long(num, arg->arg); w_encoding(encname, arg); if (ivobj != Qundef) { - struct w_ivar_arg ivarg = {arg, num}; - rb_ivar_foreach(ivobj, w_obj_each, (st_data_t)&ivarg); + w_ivar_each(ivobj, num, arg); } } @@ -682,10 +689,7 @@ w_objivar(VALUE obj, struct dump_call_arg *arg) rb_ivar_foreach(obj, obj_count_ivars, (st_data_t)&num); w_long(num, arg->arg); - if (num != 0) { - struct w_ivar_arg ivarg = {arg, num}; - rb_ivar_foreach(obj, w_obj_each, (st_data_t)&ivarg); - } + w_ivar_each(obj, num, arg); } static void |