summaryrefslogtreecommitdiff
path: root/time.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-12-19 08:36:21 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-12-19 08:36:21 +0000
commit5064e9201a655be5818fd23fbe22ff3b59909c71 (patch)
treea5adc8c91a0ad0b20e2aed60a4ad2fb8f2ed1d22 /time.c
parent528f870e143deda80c6d2230e1da6c8dc3b75176 (diff)
time.c: refine error message
* time.c (validate_vtm): separate validation failure messages for each members. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57115 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'time.c')
-rw-r--r--time.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/time.c b/time.c
index 708d9a7d9f..8f303d04c6 100644
--- a/time.c
+++ b/time.c
@@ -2514,15 +2514,18 @@ validate_zone_name(VALUE zone_name)
static void
validate_vtm(struct vtm *vtm)
{
- if ( vtm->mon < 1 || vtm->mon > 12
- || vtm->mday < 1 || vtm->mday > 31
- || vtm->hour < 0 || vtm->hour > 24
- || (vtm->hour == 24 && (vtm->min > 0 || vtm->sec > 0))
- || vtm->min < 0 || vtm->min > 59
- || vtm->sec < 0 || vtm->sec > 60
- || lt(vtm->subsecx, INT2FIX(0)) || ge(vtm->subsecx, INT2FIX(TIME_SCALE))
- || (!NIL_P(vtm->utc_offset) && (validate_utc_offset(vtm->utc_offset), 0)))
- rb_raise(rb_eArgError, "argument out of range");
+#define validate_vtm_range(mem, b, e) \
+ ((vtm->mem < b || vtm->mem > e) ? \
+ rb_raise(rb_eArgError, #mem" out of range") : (void)0)
+ validate_vtm_range(mon, 1, 12);
+ validate_vtm_range(mday, 1, 31);
+ validate_vtm_range(hour, 0, 24);
+ validate_vtm_range(min, 0, (vtm->hour == 24 ? 0 : 59));
+ validate_vtm_range(sec, 0, (vtm->hour == 24 ? 0 : 60));
+ if (lt(vtm->subsecx, INT2FIX(0)) || ge(vtm->subsecx, INT2FIX(TIME_SCALE)))
+ rb_raise(rb_eArgError, "subsecx out of range");
+ if (!NIL_P(vtm->utc_offset)) validate_utc_offset(vtm->utc_offset);
+#undef validate_vtm_range
}
static void