mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
mruby-time: adjust local variable declarations
This commit is contained in:
+55
-102
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user