diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-10-13 22:22:18 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-10-13 22:22:18 +0000 |
commit | 7735e63593a4bef31c0c573e793eec5474b4bac1 (patch) | |
tree | 503302a62f2f7ecba446b3fb973ef5c438313d28 /time.c | |
parent | 421076be676005a59f2f47fc0d3da6ecebe85db1 (diff) |
* array.c (rb_ary_and, rb_ary_or), class.c (rb_mod_init_copy),
gc.c (undefine_final), time.c (time_mload): get rid of
type-punning casts.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29492 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'time.c')
-rw-r--r-- | time.c | 30 |
1 files changed, 14 insertions, 16 deletions
@@ -4683,26 +4683,24 @@ time_mload(VALUE time, VALUE str) long nsec; VALUE submicro, nano_num, nano_den, offset; wideval_t timew; + st_data_t data; time_modify(time); - nano_num = rb_attr_get(str, id_nano_num); - if (nano_num != Qnil) { - st_delete(rb_generic_ivar_table(str), (st_data_t*)&id_nano_num, 0); - } - nano_den = rb_attr_get(str, id_nano_den); - if (nano_den != Qnil) { - st_delete(rb_generic_ivar_table(str), (st_data_t*)&id_nano_den, 0); - } - submicro = rb_attr_get(str, id_submicro); - if (submicro != Qnil) { - st_delete(rb_generic_ivar_table(str), (st_data_t*)&id_submicro, 0); - } - offset = rb_attr_get(str, id_offset); - if (offset != Qnil) { - validate_utc_offset(offset); - st_delete(rb_generic_ivar_table(str), (st_data_t*)&id_offset, 0); +#define get_attr(attr, iffound) \ + attr = rb_attr_get(str, id_##attr); \ + if (!NIL_P(attr)) { \ + data = id_##attr; \ + iffound; \ + st_delete(rb_generic_ivar_table(str), &data, 0); \ } + + get_attr(nano_num, {}); + get_attr(nano_den, {}); + get_attr(submicro, {}); + get_attr(offset, validate_utc_offset(offset)); +#undef get_attr + rb_copy_generic_ivar(time, str); StringValue(str); |