summaryrefslogtreecommitdiff
path: root/time.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-10-13 22:22:18 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-10-13 22:22:18 +0000
commit7735e63593a4bef31c0c573e793eec5474b4bac1 (patch)
tree503302a62f2f7ecba446b3fb973ef5c438313d28 /time.c
parent421076be676005a59f2f47fc0d3da6ecebe85db1 (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.c30
1 files changed, 14 insertions, 16 deletions
diff --git a/time.c b/time.c
index 18d234d63e..bd9ca1b7ba 100644
--- a/time.c
+++ b/time.c
@@ -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);