Ignore:
Timestamp:
Jul 9, 2020, 8:51:43 AM (4 years ago)
Author:
coas-nagasima
Message:

mrubyを2.1.1に更新

Location:
EcnlProtoTool/trunk/mruby-2.1.1
Files:
1 edited
1 moved

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-time/src/time.c

    r331 r439  
    55*/
    66
     7#ifndef MRB_WITHOUT_FLOAT
    78#include <math.h>
    8 #include <time.h>
     9#endif
     10
    911#include <mruby.h>
    1012#include <mruby/class.h>
    1113#include <mruby/data.h>
    12 
    13 #ifndef DISABLE_STDIO
    14 #include <stdio.h>
    15 #else
     14#include <mruby/numeric.h>
     15#include <mruby/time.h>
     16
     17#ifdef MRB_DISABLE_STDIO
    1618#include <string.h>
    1719#endif
    1820
     21#include <stdlib.h>
     22
    1923#define NDIV(x,y) (-(-((x)+1)/(y))-1)
    20 
    21 #if _MSC_VER < 1800
     24#define TO_S_FMT "%Y-%m-%d %H:%M:%S "
     25
     26#if defined(_MSC_VER) && _MSC_VER < 1800
    2227double round(double x) {
    23   if (x >= 0.0) {
    24     return (double)((int)(x + 0.5));
    25   }
    26   else {
    27     return (double)((int)(x - 0.5));
    28   }
    29 }
    30 #endif
    31 
    32 #if !defined(__MINGW64__) && defined(_WIN32)
    33 # define llround(x) round(x)
     28  return floor(x + 0.5);
     29}
     30#endif
     31
     32#ifndef MRB_WITHOUT_FLOAT
     33# if !defined(__MINGW64__) && defined(_WIN32)
     34#  define llround(x) round(x)
     35# endif
    3436#endif
    3537
     
    5254
    5355#ifdef _WIN32
    54 #if _MSC_VER
     56#ifdef _MSC_VER
    5557/* Win32 platform do not provide gmtime_r/localtime_r; emulate them using gmtime_s/localtime_s */
    5658#define gmtime_r(tp, tm)    ((gmtime_s((tm), (tp)) == 0) ? (tm) : NULL)
     
    144146  unsigned int *nday = (unsigned int*) ndays[is_leapyear(tm->tm_year+1900)];
    145147
    146   for (i = 70; i < tm->tm_year; ++i)
    147     r += is_leapyear(i+1900) ? 366*24*60*60 : 365*24*60*60;
     148  static const int epoch_year = 70;
     149  if(tm->tm_year >= epoch_year) {
     150    for (i = epoch_year; i < tm->tm_year; ++i)
     151      r += is_leapyear(i+1900) ? 366*24*60*60 : 365*24*60*60;
     152  } else {
     153    for (i = tm->tm_year; i < epoch_year; ++i)
     154      r -= is_leapyear(i+1900) ? 366*24*60*60 : 365*24*60*60;
     155  }
    148156  for (i = 0; i < tm->tm_mon; ++i)
    149157    r += nday[i] * 24 * 60 * 60;
     
    161169*/
    162170
    163 enum mrb_timezone {
    164   MRB_TIMEZONE_NONE   = 0,
    165   MRB_TIMEZONE_UTC    = 1,
    166   MRB_TIMEZONE_LOCAL  = 2,
    167   MRB_TIMEZONE_LAST   = 3
    168 };
    169 
    170171typedef struct mrb_timezone_name {
    171172  const char name[8];
     
    179180};
    180181
    181 #ifndef DISABLE_STDIO
     182#ifndef MRB_DISABLE_STDIO
    182183static const char mon_names[12][4] = {
    183184  "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
     
    198199static const struct mrb_data_type mrb_time_type = { "Time", mrb_free };
    199200
     201#ifndef MRB_WITHOUT_FLOAT
     202void mrb_check_num_exact(mrb_state *mrb, mrb_float num);
     203typedef mrb_float mrb_sec;
     204#define mrb_sec_value(mrb, sec) mrb_float_value(mrb, sec)
     205#else
     206typedef mrb_int mrb_sec;
     207#define mrb_sec_value(mrb, sec) mrb_fixnum_value(sec)
     208#endif
     209
     210#define MRB_TIME_T_UINT (~(time_t)0 > 0)
     211#define MRB_TIME_MIN (                                                      \
     212  MRB_TIME_T_UINT ? 0 :                                                     \
     213                    (sizeof(time_t) <= 4 ? INT32_MIN : INT64_MIN)           \
     214)
     215#define MRB_TIME_MAX (                                                      \
     216  MRB_TIME_T_UINT ? (sizeof(time_t) <= 4 ? UINT32_MAX : UINT64_MAX) :       \
     217                    (sizeof(time_t) <= 4 ? INT32_MAX : INT64_MAX)           \
     218)
     219
     220static mrb_bool
     221fixable_time_t_p(time_t v)
     222{
     223  if (MRB_INT_MIN <= MRB_TIME_MIN && MRB_TIME_MAX <= MRB_INT_MAX) return TRUE;
     224  return FIXABLE(v);
     225}
     226
     227static time_t
     228mrb_to_time_t(mrb_state *mrb, mrb_value obj, time_t *usec)
     229{
     230  time_t t;
     231
     232  switch (mrb_type(obj)) {
     233#ifndef MRB_WITHOUT_FLOAT
     234    case MRB_TT_FLOAT:
     235      {
     236        mrb_float f = mrb_float(obj);
     237
     238        mrb_check_num_exact(mrb, f);
     239        if (f >= ((mrb_float)MRB_TIME_MAX-1.0) || f < ((mrb_float)MRB_TIME_MIN+1.0)) {
     240          goto out_of_range;
     241        }
     242
     243        if (usec) {
     244          t = (time_t)f;
     245          *usec = (time_t)llround((f - t) * 1.0e+6);
     246        }
     247        else {
     248          t = (time_t)llround(f);
     249        }
     250      }
     251      break;
     252#endif /* MRB_WITHOUT_FLOAT */
     253    default:
     254    case MRB_TT_FIXNUM:
     255      {
     256        mrb_int i = mrb_int(mrb, obj);
     257
     258        if ((MRB_INT_MAX > MRB_TIME_MAX && i > 0 && i > (mrb_int)MRB_TIME_MAX) ||
     259            (MRB_TIME_MIN > MRB_INT_MIN && MRB_TIME_MIN > i)) {
     260          goto out_of_range;
     261        }
     262
     263        t = (time_t)i;
     264        if (usec) { *usec = 0; }
     265      }
     266      break;
     267  }
     268
     269  return t;
     270
     271out_of_range:
     272  mrb_raisef(mrb, E_ARGUMENT_ERROR, "%v out of Time range", obj);
     273
     274  /* not reached */
     275  if (usec) { *usec = 0; }
     276  return 0;
     277}
     278
    200279/** Updates the datetime of a mrb_time based on it's timezone and
    201 seconds setting. Returns self on success, NULL of failure. */
     280    seconds setting. Returns self on success, NULL of failure.
     281    if `dealloc` is set `true`, it frees `self` on error. */
    202282static struct mrb_time*
    203 time_update_datetime(mrb_state *mrb, struct mrb_time *self)
     283time_update_datetime(mrb_state *mrb, struct mrb_time *self, int dealloc)
    204284{
    205285  struct tm *aid;
     286  time_t t = self->sec;
    206287
    207288  if (self->timezone == MRB_TIMEZONE_UTC) {
    208     aid = gmtime_r(&self->sec, &self->datetime);
     289    aid = gmtime_r(&t, &self->datetime);
    209290  }
    210291  else {
    211     aid = localtime_r(&self->sec, &self->datetime);
     292    aid = localtime_r(&t, &self->datetime);
    212293  }
    213294  if (!aid) {
    214     mrb_raisef(mrb, E_ARGUMENT_ERROR, "%S out of Time range", mrb_float_value(mrb, (mrb_float)self->sec));
     295    mrb_sec sec = (mrb_sec)t;
     296
     297    if (dealloc) mrb_free(mrb, self);
     298    mrb_raisef(mrb, E_ARGUMENT_ERROR, "%v out of Time range", mrb_sec_value(mrb, sec));
    215299    /* not reached */
    216300    return NULL;
     
    229313}
    230314
    231 void mrb_check_num_exact(mrb_state *mrb, mrb_float num);
    232 
    233315/* Allocates a mrb_time object and initializes it. */
    234316static struct mrb_time*
    235 time_alloc(mrb_state *mrb, double sec, double usec, enum mrb_timezone timezone)
    236 {
    237   struct mrb_time *tm;
    238   time_t tsec = 0;
    239 
    240   mrb_check_num_exact(mrb, (mrb_float)sec);
    241   mrb_check_num_exact(mrb, (mrb_float)usec);
    242 
    243   if (sizeof(time_t) == 4 && (sec > (double)INT32_MAX || (double)INT32_MIN > sec)) {
    244     goto out_of_range;
    245   }
    246   if (sizeof(time_t) == 8 && (sec > (double)INT64_MAX || (double)INT64_MIN > sec)) {
    247     goto out_of_range;
    248   }
    249   tsec  = (time_t)sec;
    250   if ((sec > 0 && tsec < 0) || (sec < 0 && (double)tsec > sec)) {
    251   out_of_range:
    252     mrb_raisef(mrb, E_ARGUMENT_ERROR, "%S out of Time range", mrb_float_value(mrb, sec));
    253   }
     317time_alloc_time(mrb_state *mrb, time_t sec, time_t usec, enum mrb_timezone timezone)
     318{
     319  struct mrb_time *tm;
     320
    254321  tm = (struct mrb_time *)mrb_malloc(mrb, sizeof(struct mrb_time));
    255   tm->sec  = tsec;
    256   tm->usec = (time_t)llround((sec - tm->sec) * 1.0e6 + usec);
     322  tm->sec  = sec;
     323  tm->usec = usec;
    257324  if (tm->usec < 0) {
    258     long sec2 = (long)NDIV(usec,1000000); /* negative div */
     325    long sec2 = (long)NDIV(tm->usec,1000000); /* negative div */
    259326    tm->usec -= sec2 * 1000000;
    260327    tm->sec += sec2;
    261328  }
    262329  else if (tm->usec >= 1000000) {
    263     long sec2 = (long)(usec / 1000000);
     330    long sec2 = (long)(tm->usec / 1000000);
    264331    tm->usec -= sec2 * 1000000;
    265332    tm->sec += sec2;
    266333  }
    267334  tm->timezone = timezone;
    268   time_update_datetime(mrb, tm);
     335  time_update_datetime(mrb, tm, TRUE);
    269336
    270337  return tm;
    271338}
    272339
    273 static mrb_value
    274 mrb_time_make(mrb_state *mrb, struct RClass *c, double sec, double usec, enum mrb_timezone timezone)
     340static struct mrb_time*
     341time_alloc(mrb_state *mrb, mrb_value sec, mrb_value usec, enum mrb_timezone timezone)
     342{
     343  time_t tsec, tusec;
     344
     345  tsec = mrb_to_time_t(mrb, sec, &tusec);
     346  tusec += mrb_to_time_t(mrb, usec, NULL);
     347
     348  return time_alloc_time(mrb, tsec, tusec, timezone);
     349}
     350
     351static mrb_value
     352mrb_time_make_time(mrb_state *mrb, struct RClass *c, time_t sec, time_t usec, enum mrb_timezone timezone)
     353{
     354  return mrb_time_wrap(mrb, c, time_alloc_time(mrb, sec, usec, timezone));
     355}
     356
     357static mrb_value
     358mrb_time_make(mrb_state *mrb, struct RClass *c, mrb_value sec, mrb_value usec, enum mrb_timezone timezone)
    275359{
    276360  return mrb_time_wrap(mrb, c, time_alloc(mrb, sec, usec, timezone));
     
    280364current_mrb_time(mrb_state *mrb)
    281365{
    282   struct mrb_time *tm;
    283 
    284   tm = (struct mrb_time *)mrb_malloc(mrb, sizeof(*tm));
    285 #if defined(TIME_UTC)
     366  struct mrb_time tmzero = {0};
     367  struct mrb_time *tm;
     368  time_t sec, usec;
     369
     370#if defined(TIME_UTC) && !defined(__ANDROID__)
    286371  {
    287372    struct timespec ts;
    288373    if (timespec_get(&ts, TIME_UTC) == 0) {
    289       mrb_free(mrb, tm);
    290374      mrb_raise(mrb, E_RUNTIME_ERROR, "timespec_get() failed for unknown reasons");
    291375    }
    292     tm->sec = ts.tv_sec;
    293     tm->usec = ts.tv_nsec / 1000;
     376    sec = ts.tv_sec;
     377    usec = ts.tv_nsec / 1000;
    294378  }
    295379#elif defined(NO_GETTIMEOFDAY)
     
    297381    static time_t last_sec = 0, last_usec = 0;
    298382
    299     tm->sec = time(NULL);
    300     if (tm->sec != last_sec) {
    301       last_sec = tm->sec;
     383    sec = time(NULL);
     384    if (sec != last_sec) {
     385      last_sec = sec;
    302386      last_usec = 0;
    303387    }
     
    306390      last_usec += 1;
    307391    }
    308     tm->usec = last_usec;
     392    usec = last_usec;
    309393  }
    310394#else
     
    313397
    314398    gettimeofday(&tv, NULL);
    315     tm->sec = tv.tv_sec;
    316     tm->usec = tv.tv_usec;
    317   }
    318 #endif
     399    sec = tv.tv_sec;
     400    usec = tv.tv_usec;
     401  }
     402#endif
     403  tm = (struct mrb_time *)mrb_malloc(mrb, sizeof(*tm));
     404  *tm = tmzero;
     405  tm->sec = sec; tm->usec = usec;
    319406  tm->timezone = MRB_TIMEZONE_LOCAL;
    320   time_update_datetime(mrb, tm);
     407  time_update_datetime(mrb, tm, TRUE);
    321408
    322409  return tm;
     
    328415{
    329416  return mrb_time_wrap(mrb, mrb_class_ptr(self), current_mrb_time(mrb));
     417}
     418
     419MRB_API mrb_value
     420mrb_time_at(mrb_state *mrb, time_t sec, time_t usec, enum mrb_timezone zone)
     421{
     422  return mrb_time_make_time(mrb, mrb_class_get(mrb, "Time"), sec, usec, zone);
    330423}
    331424
     
    333426/* Creates an instance of time at the given time in seconds, etc. */
    334427static mrb_value
    335 mrb_time_at(mrb_state *mrb, mrb_value self)
    336 {
    337   mrb_float f, f2 = 0;
    338 
    339   mrb_get_args(mrb, "f|f", &f, &f2);
    340   return mrb_time_make(mrb, mrb_class_ptr(self), f, f2, MRB_TIMEZONE_LOCAL);
     428mrb_time_at_m(mrb_state *mrb, mrb_value self)
     429{
     430  mrb_value sec;
     431  mrb_value usec = mrb_fixnum_value(0);
     432
     433  mrb_get_args(mrb, "o|o", &sec, &usec);
     434
     435  return mrb_time_make(mrb, mrb_class_ptr(self), sec, usec, MRB_TIMEZONE_LOCAL);
    341436}
    342437
     
    375470  }
    376471
    377   return time_alloc(mrb, (double)nowsecs, ausec, timezone);
     472  return time_alloc_time(mrb, nowsecs, ausec, timezone);
    378473}
    379474
     
    461556mrb_time_plus(mrb_state *mrb, mrb_value self)
    462557{
    463   mrb_float f;
    464   struct mrb_time *tm;
    465 
    466   mrb_get_args(mrb, "f", &f);
    467   tm = time_get_ptr(mrb, self);
    468   return mrb_time_make(mrb, mrb_obj_class(mrb, self), (double)tm->sec+f, (double)tm->usec, tm->timezone);
     558  mrb_value o;
     559  struct mrb_time *tm;
     560  time_t sec, usec;
     561
     562  mrb_get_args(mrb, "o", &o);
     563  tm = time_get_ptr(mrb, self);
     564  sec = mrb_to_time_t(mrb, o, &usec);
     565  return mrb_time_make_time(mrb, mrb_obj_class(mrb, self), tm->sec+sec, tm->usec+usec, tm->timezone);
    469566}
    470567
     
    472569mrb_time_minus(mrb_state *mrb, mrb_value self)
    473570{
    474   mrb_float f;
    475571  mrb_value other;
    476572  struct mrb_time *tm, *tm2;
     
    480576  tm2 = DATA_CHECK_GET_PTR(mrb, other, &mrb_time_type, struct mrb_time);
    481577  if (tm2) {
    482     f = (mrb_float)(tm->sec - tm2->sec)
    483       + (mrb_float)(tm->usec - tm2->usec) / 1.0e6;
     578#ifndef MRB_WITHOUT_FLOAT
     579    mrb_float f;
     580    f = (mrb_sec)(tm->sec - tm2->sec)
     581      + (mrb_sec)(tm->usec - tm2->usec) / 1.0e6;
    484582    return mrb_float_value(mrb, f);
     583#else
     584    mrb_int f;
     585    f = tm->sec - tm2->sec;
     586    if (tm->usec < tm2->usec) f--;
     587    return mrb_fixnum_value(f);
     588#endif
    485589  }
    486590  else {
    487     mrb_get_args(mrb, "f", &f);
    488     return mrb_time_make(mrb, mrb_obj_class(mrb, self), (double)tm->sec-f, (double)tm->usec, tm->timezone);
     591    time_t sec, usec;
     592    sec = mrb_to_time_t(mrb, other, &usec);
     593    return mrb_time_make_time(mrb, mrb_obj_class(mrb, self), tm->sec-sec, tm->usec-usec, tm->timezone);
    489594  }
    490595}
     
    547652  int len;
    548653
    549 #if defined(DISABLE_STDIO)
     654#if defined(MRB_DISABLE_STDIO)
    550655  char *s;
    551656# ifdef NO_ASCTIME_R
     
    559664  char buf[256];
    560665
    561   len = snprintf(buf, sizeof(buf), "%s %s %02d %02d:%02d:%02d %s%d",
     666  len = snprintf(buf, sizeof(buf), "%s %s %2d %02d:%02d:%02d %.4d",
    562667    wday_names[d->tm_wday], mon_names[d->tm_mon], d->tm_mday,
    563668    d->tm_hour, d->tm_min, d->tm_sec,
    564     tm->timezone == MRB_TIMEZONE_UTC ? "UTC " : "",
    565669    d->tm_year + 1900);
    566670#endif
     
    603707  *tm2 = *tm;
    604708  tm2->timezone = MRB_TIMEZONE_UTC;
    605   time_update_datetime(mrb, tm2);
     709  time_update_datetime(mrb, tm2, TRUE);
    606710  return mrb_time_wrap(mrb, mrb_obj_class(mrb, self), tm2);
    607711}
     
    618722  *tm2 = *tm;
    619723  tm2->timezone = MRB_TIMEZONE_LOCAL;
    620   time_update_datetime(mrb, tm2);
     724  time_update_datetime(mrb, tm2, TRUE);
    621725  return mrb_time_wrap(mrb, mrb_obj_class(mrb, self), tm2);
    622726}
     
    640744  mrb_int ayear = 0, amonth = 1, aday = 1, ahour = 0,
    641745  amin = 0, asec = 0, ausec = 0;
    642   int n;
     746  mrb_int n;
    643747  struct mrb_time *tm;
    644748
     
    696800  tm = time_get_ptr(mrb, self);
    697801  tm->timezone = MRB_TIMEZONE_LOCAL;
    698   time_update_datetime(mrb, tm);
     802  time_update_datetime(mrb, tm, FALSE);
    699803  return self;
    700804}
     
    744848}
    745849
    746 
     850#ifndef MRB_WITHOUT_FLOAT
    747851/* 15.2.19.7.24 */
    748852/* Returns a Float with the time since the epoch in seconds. */
     
    755859  return mrb_float_value(mrb, (mrb_float)tm->sec + (mrb_float)tm->usec/1.0e6);
    756860}
     861#endif
    757862
    758863/* 15.2.19.7.25 */
    759 /* Returns a Fixnum with the time since the epoch in seconds. */
     864/* Returns an Integer with the time since the epoch in seconds. */
    760865static mrb_value
    761866mrb_time_to_i(mrb_state *mrb, mrb_value self)
     
    764869
    765870  tm = time_get_ptr(mrb, self);
    766   if (tm->sec > MRB_INT_MAX || tm->sec < MRB_INT_MIN) {
     871#ifndef MRB_WITHOUT_FLOAT
     872  if (!fixable_time_t_p(tm->sec)) {
    767873    return mrb_float_value(mrb, (mrb_float)tm->sec);
    768874  }
     875#endif
    769876  return mrb_fixnum_value((mrb_int)tm->sec);
    770877}
    771878
    772879/* 15.2.19.7.26 */
    773 /* Returns a Float with the time since the epoch in microseconds. */
     880/* Returns an Integer with the time since the epoch in microseconds. */
    774881static mrb_value
    775882mrb_time_usec(mrb_state *mrb, mrb_value self)
     
    778885
    779886  tm = time_get_ptr(mrb, self);
    780   if (tm->usec > MRB_INT_MAX || tm->usec < MRB_INT_MIN) {
     887#ifndef MRB_WITHOUT_FLOAT
     888  if (!fixable_time_t_p(tm->usec)) {
    781889    return mrb_float_value(mrb, (mrb_float)tm->usec);
    782890  }
     891#endif
    783892  return mrb_fixnum_value((mrb_int)tm->usec);
    784893}
     
    793902  tm = time_get_ptr(mrb, self);
    794903  tm->timezone = MRB_TIMEZONE_UTC;
    795   time_update_datetime(mrb, tm);
     904  time_update_datetime(mrb, tm, FALSE);
    796905  return self;
    797906}
     
    808917}
    809918
     919static size_t
     920time_to_s_utc(mrb_state *mrb, struct mrb_time *tm, char *buf, size_t buf_len)
     921{
     922  return strftime(buf, buf_len, TO_S_FMT "UTC", &tm->datetime);
     923}
     924
     925static size_t
     926time_to_s_local(mrb_state *mrb, struct mrb_time *tm, char *buf, size_t buf_len)
     927{
     928#if defined(_MSC_VER) && _MSC_VER < 1900 || defined(__MINGW64__) || defined(__MINGW32__)
     929  struct tm datetime = {0};
     930  time_t utc_sec = timegm(&tm->datetime);
     931  size_t len;
     932  int offset;
     933
     934  if (utc_sec == (time_t)-1) {
     935    mrb_raise(mrb, E_ARGUMENT_ERROR, "Not a valid time.");
     936  }
     937  offset = abs((int)(utc_sec - tm->sec) / 60);
     938  datetime.tm_year = 100;
     939  datetime.tm_hour = offset / 60;
     940  datetime.tm_min = offset % 60;
     941  len = strftime(buf, buf_len, TO_S_FMT, &tm->datetime);
     942  buf[len++] = utc_sec < tm->sec ? '-' : '+';
     943
     944  return len + strftime(buf + len, buf_len - len, "%H%M", &datetime);
     945#else
     946  return strftime(buf, buf_len, TO_S_FMT "%z", &tm->datetime);
     947#endif
     948}
     949
     950static mrb_value
     951mrb_time_to_s(mrb_state *mrb, mrb_value self)
     952{
     953  char buf[64];
     954  struct mrb_time *tm = time_get_ptr(mrb, self);
     955  mrb_bool utc = tm->timezone == MRB_TIMEZONE_UTC;
     956  size_t len = (utc ? time_to_s_utc : time_to_s_local)(mrb, tm, buf, sizeof(buf));
     957  return mrb_str_new(mrb, buf, len);
     958}
    810959
    811960void
     
    817966  MRB_SET_INSTANCE_TT(tc, MRB_TT_DATA);
    818967  mrb_include_module(mrb, tc, mrb_module_get(mrb, "Comparable"));
    819   mrb_define_class_method(mrb, tc, "at", mrb_time_at, MRB_ARGS_ARG(1, 1));      /* 15.2.19.6.1 */
     968  mrb_define_class_method(mrb, tc, "at", mrb_time_at_m, MRB_ARGS_ARG(1, 1));      /* 15.2.19.6.1 */
    820969  mrb_define_class_method(mrb, tc, "gm", mrb_time_gm, MRB_ARGS_ARG(1,6));       /* 15.2.19.6.2 */
    821970  mrb_define_class_method(mrb, tc, "local", mrb_time_local, MRB_ARGS_ARG(1,6)); /* 15.2.19.6.3 */
     
    828977  mrb_define_method(mrb, tc, "+"      , mrb_time_plus   , MRB_ARGS_REQ(1)); /* 15.2.19.7.2 */
    829978  mrb_define_method(mrb, tc, "-"      , mrb_time_minus  , MRB_ARGS_REQ(1)); /* 15.2.19.7.3 */
    830   mrb_define_method(mrb, tc, "to_s"   , mrb_time_asctime, MRB_ARGS_NONE());
    831   mrb_define_method(mrb, tc, "inspect", mrb_time_asctime, MRB_ARGS_NONE());
     979  mrb_define_method(mrb, tc, "to_s"   , mrb_time_to_s   , MRB_ARGS_NONE());
     980  mrb_define_method(mrb, tc, "inspect", mrb_time_to_s   , MRB_ARGS_NONE());
    832981  mrb_define_method(mrb, tc, "asctime", mrb_time_asctime, MRB_ARGS_NONE()); /* 15.2.19.7.4 */
    833982  mrb_define_method(mrb, tc, "ctime"  , mrb_time_asctime, MRB_ARGS_NONE()); /* 15.2.19.7.5 */
     
    849998  mrb_define_method(mrb, tc, "sec" , mrb_time_sec, MRB_ARGS_NONE());        /* 15.2.19.7.23 */
    850999  mrb_define_method(mrb, tc, "to_i", mrb_time_to_i, MRB_ARGS_NONE());       /* 15.2.19.7.25 */
     1000#ifndef MRB_WITHOUT_FLOAT
    8511001  mrb_define_method(mrb, tc, "to_f", mrb_time_to_f, MRB_ARGS_NONE());       /* 15.2.19.7.24 */
     1002#endif
    8521003  mrb_define_method(mrb, tc, "usec", mrb_time_usec, MRB_ARGS_NONE());       /* 15.2.19.7.26 */
    8531004  mrb_define_method(mrb, tc, "utc" , mrb_time_utc, MRB_ARGS_NONE());        /* 15.2.19.7.27 */
Note: See TracChangeset for help on using the changeset viewer.