summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-08-14 16:50:52 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2013-08-14 16:50:52 +0900
commitb7d6b4d0ce388599b36cacd42069944c326d2582 (patch)
tree3a4756be851a1a0fc056ab6e1312e0bf48503a47
parent0dfda0c9704a0375705cf401ccda6b277bc68bed (diff)
downloadmruby-b7d6b4d0ce388599b36cacd42069944c326d2582.tar.gz
mruby-b7d6b4d0ce388599b36cacd42069944c326d2582.zip
define allocation method for Time class; close #1474
-rw-r--r--mrbgems/mruby-time/src/time.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/mrbgems/mruby-time/src/time.c b/mrbgems/mruby-time/src/time.c
index 0273f2b27..07e10e2c6 100644
--- a/mrbgems/mruby-time/src/time.c
+++ b/mrbgems/mruby-time/src/time.c
@@ -147,7 +147,7 @@ mrb_time_wrap(mrb_state *mrb, struct RClass *tc, struct mrb_time *tm)
/* Allocates a mrb_time object and initializes it. */
static struct mrb_time*
-mrb_time_alloc(mrb_state *mrb, double sec, double usec, enum mrb_timezone timezone)
+time_alloc(mrb_state *mrb, double sec, double usec, enum mrb_timezone timezone)
{
struct mrb_time *tm;
@@ -171,7 +171,14 @@ mrb_time_alloc(mrb_state *mrb, double sec, double usec, enum mrb_timezone timezo
static mrb_value
mrb_time_make(mrb_state *mrb, struct RClass *c, double sec, double usec, enum mrb_timezone timezone)
{
- return mrb_time_wrap(mrb, c, mrb_time_alloc(mrb, sec, usec, timezone));
+ return mrb_time_wrap(mrb, c, time_alloc(mrb, sec, usec, timezone));
+}
+
+/* Allocates a mrb_time object and initializes it. */
+static mrb_value
+mrb_time_alloc(mrb_state *mrb, mrb_value cv)
+{
+ return mrb_time_make(mrb, mrb_class_ptr(cv), 0, 0, MRB_TIMEZONE_NONE);
}
static struct mrb_time*
@@ -253,7 +260,7 @@ time_mktime(mrb_state *mrb, mrb_int ayear, mrb_int amonth, mrb_int aday,
mrb_raise(mrb, E_ARGUMENT_ERROR, "Not a valid time.");
}
- return mrb_time_alloc(mrb, nowsecs, ausec, timezone);
+ return time_alloc(mrb, nowsecs, ausec, timezone);
}
/* 15.2.19.6.2 */
@@ -685,6 +692,7 @@ mrb_mruby_time_gem_init(mrb_state* mrb)
tc = mrb_define_class(mrb, "Time", mrb->object_class);
MRB_SET_INSTANCE_TT(tc, MRB_TT_DATA);
mrb_include_module(mrb, tc, mrb_class_get(mrb, "Comparable"));
+ mrb_define_class_method(mrb, tc, "alloc", mrb_time_alloc, MRB_ARGS_NONE());
mrb_define_class_method(mrb, tc, "at", mrb_time_at, MRB_ARGS_ANY()); /* 15.2.19.6.1 */
mrb_define_class_method(mrb, tc, "gm", mrb_time_gm, MRB_ARGS_ARG(1,6)); /* 15.2.19.6.2 */
mrb_define_class_method(mrb, tc, "local", mrb_time_local, MRB_ARGS_ARG(1,6)); /* 15.2.19.6.3 */