mruby-time: adjust local variable declarations

This commit is contained in:
Yukihiro "Matz" Matsumoto
2024-05-02 19:55:29 +09:00
parent c5314a29b7
commit 4801a424a3
+55 -102
View File
@@ -221,6 +221,12 @@ fixable_time_t_p(time_t v)
return TRUE;
}
static void
time_out_of_range(mrb_state *mrb, mrb_value obj)
{
mrb_raisef(mrb, E_ARGUMENT_ERROR, "%v out of Time range", obj);
}
static time_t
mrb_to_time_t(mrb_state *mrb, mrb_value obj, time_t *usec)
{
@@ -234,18 +240,18 @@ mrb_to_time_t(mrb_state *mrb, mrb_value obj, time_t *usec)
mrb_check_num_exact(mrb, f);
if (f >= ((mrb_float)MRB_TIME_MAX-1.0) || f < ((mrb_float)MRB_TIME_MIN+1.0)) {
goto out_of_range;
time_out_of_range(mrb, obj);
}
if (usec) {
double tt = floor(f);
if (!isfinite(tt)) goto out_of_range;
if (!isfinite(tt)) time_out_of_range(mrb, obj);
t = (time_t)tt;
*usec = (time_t)trunc((f - tt) * 1.0e+6);
}
else {
double tt = round(f);
if (!isfinite(tt)) goto out_of_range;
if (!isfinite(tt)) time_out_of_range(mrb, obj);
t = (time_t)tt;
}
}
@@ -279,7 +285,7 @@ mrb_to_time_t(mrb_state *mrb, mrb_value obj, time_t *usec)
if ((MRB_INT_MAX > MRB_TIME_MAX && i > 0 && (time_t)i > MRB_TIME_MAX) ||
(0 > MRB_TIME_MIN && MRB_TIME_MIN > MRB_INT_MIN && MRB_TIME_MIN > i)) {
goto out_of_range;
time_out_of_range(mrb, obj);
}
t = (time_t)i;
@@ -293,12 +299,6 @@ mrb_to_time_t(mrb_state *mrb, mrb_value obj, time_t *usec)
}
return t;
out_of_range:
mrb_raisef(mrb, E_ARGUMENT_ERROR, "%v out of Time range", obj);
/* not reached */
return 0;
}
static mrb_value
@@ -327,8 +327,8 @@ time_value_from_time_t(mrb_state *mrb, time_t t)
static struct mrb_time*
time_update_datetime(mrb_state *mrb, struct mrb_time *self, int dealloc)
{
struct tm *aid;
time_t t = self->sec;
struct tm *aid;
if (self->timezone == MRB_TIMEZONE_UTC) {
aid = gmtime_r(&t, &self->datetime);
@@ -338,7 +338,7 @@ time_update_datetime(mrb_state *mrb, struct mrb_time *self, int dealloc)
}
if (!aid) {
if (dealloc) mrb_free(mrb, self);
mrb_raisef(mrb, E_ARGUMENT_ERROR, "%v out of Time range", time_value_from_time_t(mrb, t));
time_out_of_range(mrb, time_value_from_time_t(mrb, t));
/* not reached */
return NULL;
}
@@ -359,11 +359,10 @@ time_wrap(mrb_state *mrb, struct RClass *tc, struct mrb_time *tm)
static struct mrb_time*
time_alloc_time(mrb_state *mrb, time_t sec, time_t usec, enum mrb_timezone timezone)
{
struct mrb_time *tm;
tm = (struct mrb_time*)mrb_malloc(mrb, sizeof(struct mrb_time));
struct mrb_time *tm = (struct mrb_time*)mrb_malloc(mrb, sizeof(struct mrb_time));
tm->sec = sec;
tm->usec = usec;
if (!MRB_TIME_T_UINT && tm->usec < 0) {
long sec2 = (long)NDIV(tm->usec,1000000); /* negative div */
tm->usec -= sec2 * 1000000;
@@ -407,7 +406,6 @@ static struct mrb_time*
current_mrb_time(mrb_state *mrb)
{
struct mrb_time tmzero = {0};
struct mrb_time *tm;
time_t sec, usec;
#if defined(TIME_UTC) && !defined(__ANDROID__)
@@ -448,7 +446,8 @@ current_mrb_time(mrb_state *mrb)
usec = tv.tv_usec;
}
#endif
tm = (struct mrb_time*)mrb_malloc(mrb, sizeof(*tm));
struct mrb_time *tm = (struct mrb_time*)mrb_malloc(mrb, sizeof(*tm));
*tm = tmzero;
tm->sec = sec; tm->usec = usec;
tm->timezone = MRB_TIMEZONE_LOCAL;
@@ -488,7 +487,6 @@ time_mktime(mrb_state *mrb, mrb_int ayear, mrb_int amonth, mrb_int aday,
mrb_int ahour, mrb_int amin, mrb_int asec, mrb_int ausec,
enum mrb_timezone timezone)
{
time_t nowsecs;
struct tm nowtime = { 0 };
#if MRB_INT_MAX > INT_MAX
@@ -522,7 +520,8 @@ time_mktime(mrb_state *mrb, mrb_int ayear, mrb_int amonth, mrb_int aday,
else {
mk = mktime;
}
nowsecs = (*mk)(&nowtime);
time_t nowsecs = (*mk)(&nowtime);
if (nowsecs == (time_t)-1) {
nowtime.tm_sec += 1; /* maybe Epoch-1 sec */
nowsecs = (*mk)(&nowtime);
@@ -565,9 +564,7 @@ time_local(mrb_state *mrb, mrb_value self)
static struct mrb_time*
time_get_ptr(mrb_state *mrb, mrb_value time)
{
struct mrb_time *tm;
tm = DATA_GET_PTR(mrb, time, &time_type, struct mrb_time);
struct mrb_time *tm = DATA_GET_PTR(mrb, time, &time_type, struct mrb_time);
if (!tm) {
mrb_raise(mrb, E_ARGUMENT_ERROR, "uninitialized time");
}
@@ -578,12 +575,9 @@ static mrb_value
time_eq(mrb_state *mrb, mrb_value self)
{
mrb_value other = mrb_get_arg1(mrb);
struct mrb_time *tm1, *tm2;
mrb_bool eq_p;
tm1 = DATA_GET_PTR(mrb, self, &time_type, struct mrb_time);
tm2 = DATA_CHECK_GET_PTR(mrb, other, &time_type, struct mrb_time);
eq_p = tm1 && tm2 && tm1->sec == tm2->sec && tm1->usec == tm2->usec;
struct mrb_time *tm1 = DATA_GET_PTR(mrb, self, &time_type, struct mrb_time);
struct mrb_time *tm2 = DATA_CHECK_GET_PTR(mrb, other, &time_type, struct mrb_time);
mrb_bool eq_p = tm1 && tm2 && tm1->sec == tm2->sec && tm1->usec == tm2->usec;
return mrb_bool_value(eq_p);
}
@@ -592,10 +586,9 @@ static mrb_value
time_cmp(mrb_state *mrb, mrb_value self)
{
mrb_value other = mrb_get_arg1(mrb);
struct mrb_time *tm1, *tm2;
struct mrb_time *tm1 = DATA_GET_PTR(mrb, self, &time_type, struct mrb_time);
struct mrb_time *tm2 = DATA_CHECK_GET_PTR(mrb, other, &time_type, struct mrb_time);
tm1 = DATA_GET_PTR(mrb, self, &time_type, struct mrb_time);
tm2 = DATA_CHECK_GET_PTR(mrb, other, &time_type, struct mrb_time);
if (!tm1 || !tm2) return mrb_nil_value();
if (tm1->sec > tm2->sec) {
return mrb_fixnum_value(1);
@@ -623,10 +616,9 @@ static mrb_value
time_plus(mrb_state *mrb, mrb_value self)
{
mrb_value o = mrb_get_arg1(mrb);
struct mrb_time *tm;
time_t sec, usec;
tm = time_get_ptr(mrb, self);
struct mrb_time *tm = time_get_ptr(mrb, self);
sec = mrb_to_time_t(mrb, o, &usec);
#ifdef MRB_HAVE_TYPE_GENERIC_CHECKED_ARITHMETIC_BUILTINS
if (__builtin_add_overflow(tm->sec, sec, &sec)) {
@@ -652,10 +644,9 @@ static mrb_value
time_minus(mrb_state *mrb, mrb_value self)
{
mrb_value other = mrb_get_arg1(mrb);
struct mrb_time *tm, *tm2;
struct mrb_time *tm = time_get_ptr(mrb, self);
struct mrb_time *tm2 = DATA_CHECK_GET_PTR(mrb, other, &time_type, struct mrb_time);
tm = time_get_ptr(mrb, self);
tm2 = DATA_CHECK_GET_PTR(mrb, other, &time_type, struct mrb_time);
if (tm2) {
#ifndef MRB_NO_FLOAT
mrb_float f;
@@ -698,9 +689,7 @@ time_minus(mrb_state *mrb, mrb_value self)
static mrb_value
time_wday(mrb_state *mrb, mrb_value self)
{
struct mrb_time *tm;
tm = time_get_ptr(mrb, self);
struct mrb_time *tm = time_get_ptr(mrb, self);
return mrb_fixnum_value(tm->datetime.tm_wday);
}
@@ -709,9 +698,7 @@ time_wday(mrb_state *mrb, mrb_value self)
static mrb_value
time_yday(mrb_state *mrb, mrb_value self)
{
struct mrb_time *tm;
tm = time_get_ptr(mrb, self);
struct mrb_time *tm = time_get_ptr(mrb, self);
return mrb_fixnum_value(tm->datetime.tm_yday + 1);
}
@@ -720,9 +707,7 @@ time_yday(mrb_state *mrb, mrb_value self)
static mrb_value
time_year(mrb_state *mrb, mrb_value self)
{
struct mrb_time *tm;
tm = time_get_ptr(mrb, self);
struct mrb_time *tm = time_get_ptr(mrb, self);
return mrb_fixnum_value(tm->datetime.tm_year + 1900);
}
@@ -790,9 +775,7 @@ time_asctime(mrb_state *mrb, mrb_value self)
static mrb_value
time_day(mrb_state *mrb, mrb_value self)
{
struct mrb_time *tm;
tm = time_get_ptr(mrb, self);
struct mrb_time *tm = time_get_ptr(mrb, self);
return mrb_fixnum_value(tm->datetime.tm_mday);
}
@@ -802,9 +785,7 @@ time_day(mrb_state *mrb, mrb_value self)
static mrb_value
time_dst_p(mrb_state *mrb, mrb_value self)
{
struct mrb_time *tm;
tm = time_get_ptr(mrb, self);
struct mrb_time *tm = time_get_ptr(mrb, self);
return mrb_bool_value(tm->datetime.tm_isdst);
}
@@ -814,10 +795,8 @@ time_dst_p(mrb_state *mrb, mrb_value self)
static mrb_value
time_getutc(mrb_state *mrb, mrb_value self)
{
struct mrb_time *tm, *tm2;
tm = time_get_ptr(mrb, self);
tm2 = (struct mrb_time*)mrb_malloc(mrb, sizeof(*tm));
struct mrb_time *tm = time_get_ptr(mrb, self);
struct mrb_time *tm2 = (struct mrb_time*)mrb_malloc(mrb, sizeof(*tm));
*tm2 = *tm;
tm2->timezone = MRB_TIMEZONE_UTC;
time_update_datetime(mrb, tm2, TRUE);
@@ -829,10 +808,8 @@ time_getutc(mrb_state *mrb, mrb_value self)
static mrb_value
time_getlocal(mrb_state *mrb, mrb_value self)
{
struct mrb_time *tm, *tm2;
tm = time_get_ptr(mrb, self);
tm2 = (struct mrb_time*)mrb_malloc(mrb, sizeof(*tm));
struct mrb_time *tm = time_get_ptr(mrb, self);
struct mrb_time *tm2 = (struct mrb_time*)mrb_malloc(mrb, sizeof(*tm));
*tm2 = *tm;
tm2->timezone = MRB_TIMEZONE_LOCAL;
time_update_datetime(mrb, tm2, TRUE);
@@ -844,9 +821,7 @@ time_getlocal(mrb_state *mrb, mrb_value self)
static mrb_value
time_hour(mrb_state *mrb, mrb_value self)
{
struct mrb_time *tm;
tm = time_get_ptr(mrb, self);
struct mrb_time *tm = time_get_ptr(mrb, self);
return mrb_fixnum_value(tm->datetime.tm_hour);
}
@@ -857,12 +832,11 @@ time_init(mrb_state *mrb, mrb_value self)
{
mrb_int ayear = 0, amonth = 1, aday = 1, ahour = 0,
amin = 0, asec = 0, ausec = 0;
mrb_int n;
struct mrb_time *tm;
n = mrb_get_args(mrb, "|iiiiiii",
&ayear, &amonth, &aday, &ahour, &amin, &asec, &ausec);
tm = (struct mrb_time*)DATA_PTR(self);
mrb_int n = mrb_get_args(mrb, "|iiiiiii",
&ayear, &amonth, &aday, &ahour, &amin, &asec, &ausec);
struct mrb_time *tm = (struct mrb_time*)DATA_PTR(self);
if (tm) {
mrb_free(mrb, tm);
}
@@ -884,14 +858,14 @@ static mrb_value
time_init_copy(mrb_state *mrb, mrb_value copy)
{
mrb_value src = mrb_get_arg1(mrb);
struct mrb_time *t1, *t2;
if (mrb_obj_equal(mrb, copy, src)) return copy;
if (!mrb_obj_is_instance_of(mrb, src, mrb_obj_class(mrb, copy))) {
mrb_raise(mrb, E_TYPE_ERROR, "wrong argument class");
}
t1 = (struct mrb_time*)DATA_PTR(copy);
t2 = (struct mrb_time*)DATA_PTR(src);
struct mrb_time *t1 = (struct mrb_time*)DATA_PTR(copy);
struct mrb_time *t2 = (struct mrb_time*)DATA_PTR(src);
if (!t2) {
mrb_raise(mrb, E_ARGUMENT_ERROR, "uninitialized time");
}
@@ -908,9 +882,7 @@ time_init_copy(mrb_state *mrb, mrb_value copy)
static mrb_value
time_localtime(mrb_state *mrb, mrb_value self)
{
struct mrb_time *tm;
tm = time_get_ptr(mrb, self);
struct mrb_time *tm = time_get_ptr(mrb, self);
tm->timezone = MRB_TIMEZONE_LOCAL;
time_update_datetime(mrb, tm, FALSE);
return self;
@@ -921,9 +893,7 @@ time_localtime(mrb_state *mrb, mrb_value self)
static mrb_value
time_mday(mrb_state *mrb, mrb_value self)
{
struct mrb_time *tm;
tm = time_get_ptr(mrb, self);
struct mrb_time *tm = time_get_ptr(mrb, self);
return mrb_fixnum_value(tm->datetime.tm_mday);
}
@@ -932,9 +902,7 @@ time_mday(mrb_state *mrb, mrb_value self)
static mrb_value
time_min(mrb_state *mrb, mrb_value self)
{
struct mrb_time *tm;
tm = time_get_ptr(mrb, self);
struct mrb_time *tm = time_get_ptr(mrb, self);
return mrb_fixnum_value(tm->datetime.tm_min);
}
@@ -943,9 +911,7 @@ time_min(mrb_state *mrb, mrb_value self)
static mrb_value
time_mon(mrb_state *mrb, mrb_value self)
{
struct mrb_time *tm;
tm = time_get_ptr(mrb, self);
struct mrb_time *tm = time_get_ptr(mrb, self);
return mrb_fixnum_value(tm->datetime.tm_mon + 1);
}
@@ -954,9 +920,7 @@ time_mon(mrb_state *mrb, mrb_value self)
static mrb_value
time_sec(mrb_state *mrb, mrb_value self)
{
struct mrb_time *tm;
tm = time_get_ptr(mrb, self);
struct mrb_time *tm = time_get_ptr(mrb, self);
return mrb_fixnum_value(tm->datetime.tm_sec);
}
@@ -966,9 +930,7 @@ time_sec(mrb_state *mrb, mrb_value self)
static mrb_value
time_to_f(mrb_state *mrb, mrb_value self)
{
struct mrb_time *tm;
tm = time_get_ptr(mrb, self);
struct mrb_time *tm = time_get_ptr(mrb, self);
return mrb_float_value(mrb, (mrb_float)tm->sec + (mrb_float)tm->usec/1.0e6);
}
#endif
@@ -978,9 +940,7 @@ time_to_f(mrb_state *mrb, mrb_value self)
static mrb_value
time_to_i(mrb_state *mrb, mrb_value self)
{
struct mrb_time *tm;
tm = time_get_ptr(mrb, self);
struct mrb_time *tm = time_get_ptr(mrb, self);
return time_value_from_time_t(mrb, tm->sec);
}
@@ -989,9 +949,7 @@ time_to_i(mrb_state *mrb, mrb_value self)
static mrb_value
time_usec(mrb_state *mrb, mrb_value self)
{
struct mrb_time *tm;
tm = time_get_ptr(mrb, self);
struct mrb_time *tm = time_get_ptr(mrb, self);
return mrb_fixnum_value((mrb_int)tm->usec);
}
@@ -1000,9 +958,7 @@ time_usec(mrb_state *mrb, mrb_value self)
static mrb_value
time_utc(mrb_state *mrb, mrb_value self)
{
struct mrb_time *tm;
tm = time_get_ptr(mrb, self);
struct mrb_time *tm = time_get_ptr(mrb, self);
tm->timezone = MRB_TIMEZONE_UTC;
time_update_datetime(mrb, tm, FALSE);
return self;
@@ -1013,9 +969,7 @@ time_utc(mrb_state *mrb, mrb_value self)
static mrb_value
time_utc_p(mrb_state *mrb, mrb_value self)
{
struct mrb_time *tm;
tm = time_get_ptr(mrb, self);
struct mrb_time *tm = time_get_ptr(mrb, self);
return mrb_bool_value(tm->timezone == MRB_TIMEZONE_UTC);
}
@@ -1097,9 +1051,8 @@ time_saturday(mrb_state *mrb, mrb_value self)
void
mrb_mruby_time_gem_init(mrb_state* mrb)
{
struct RClass *tc;
/* ISO 15.2.19.2 */
tc = mrb_define_class(mrb, "Time", mrb->object_class);
struct RClass *tc = mrb_define_class(mrb, "Time", mrb->object_class);
MRB_SET_INSTANCE_TT(tc, MRB_TT_CDATA);
mrb_include_module(mrb, tc, mrb_module_get(mrb, "Comparable"));
mrb_define_class_method(mrb, tc, "at", time_at_m, MRB_ARGS_ARG(1, 1)); /* 15.2.19.6.1 */