From 75f5535c4fcccb09006a1cd718a8096e96b0d7da Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 4 Apr 2013 04:30:39 +0900 Subject: rename DATA API: mrb_get_datatype -> mrb_data_get_ptr; mrb_check_datatype -> mrb_data_check_and_get --- include/mruby/data.h | 9 ++++--- mrbgems/mruby-random/src/random.c | 2 +- mrbgems/mruby-time/src/time.c | 56 +++++++++++++++++++-------------------- src/etc.c | 27 ++++++++++++------- 4 files changed, 53 insertions(+), 41 deletions(-) diff --git a/include/mruby/data.h b/include/mruby/data.h index 6ddaebfaa..2fffd0c69 100644 --- a/include/mruby/data.h +++ b/include/mruby/data.h @@ -37,10 +37,13 @@ struct RData *mrb_data_object_alloc(mrb_state *mrb, struct RClass* klass, void * #define RDATA(obj) ((struct RData *)((obj).value.p)) #define DATA_PTR(d) (RDATA(d)->data) #define DATA_TYPE(d) (RDATA(d)->type) -void *mrb_get_datatype(mrb_state *mrb, mrb_value, const mrb_data_type*); -void *mrb_check_datatype(mrb_state *mrb, mrb_value, const mrb_data_type*); +void mrb_data_check_type(mrb_state *mrb, mrb_value, const mrb_data_type*); +void *mrb_data_get_ptr(mrb_state *mrb, mrb_value, const mrb_data_type*); +void *mrb_data_check_and_get(mrb_state *mrb, mrb_value, const mrb_data_type*); +#define mrb_get_datatype(mrb,val,type) mrb_data_get_ptr(mrb, val, type) +#define mrb_check_datatype(mrb,val,type) mrb_data_check_and_get(mrb, val, type) #define Data_Get_Struct(mrb,obj,type,sval) do {\ - *(void**)&sval = mrb_check_datatype(mrb, obj, type); \ + *(void**)&sval = mrb_data_check_and_get(mrb, obj, type); \ } while (0) #if defined(__cplusplus) diff --git a/mrbgems/mruby-random/src/random.c b/mrbgems/mruby-random/src/random.c index 6500b3f84..ba90d664e 100644 --- a/mrbgems/mruby-random/src/random.c +++ b/mrbgems/mruby-random/src/random.c @@ -29,7 +29,7 @@ static mt_state *mrb_mt_get_context(mrb_state *mrb, mrb_value self) mrb_value context; context = mrb_iv_get(mrb, self, mrb_intern(mrb, MT_STATE_KEY)); - t = (mt_state *)mrb_check_datatype(mrb, context, &mt_state_type); + t = (mt_state*)mrb_data_get_ptr(mrb, context, &mt_state_type); if (!t) mrb_raise(mrb, E_RUNTIME_ERROR, "mt_state get from mrb_iv_get failed"); diff --git a/mrbgems/mruby-time/src/time.c b/mrbgems/mruby-time/src/time.c index 0ffc0e6f8..200eed0a0 100644 --- a/mrbgems/mruby-time/src/time.c +++ b/mrbgems/mruby-time/src/time.c @@ -298,8 +298,8 @@ mrb_time_eq(mrb_state *mrb, mrb_value self) mrb_bool eq_p; mrb_get_args(mrb, "o", &other); - tm1 = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); - tm2 = (struct mrb_time *)mrb_get_datatype(mrb, other, &mrb_time_type); + tm1 = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); + tm2 = (struct mrb_time*)mrb_data_get_ptr(mrb, other, &mrb_time_type); eq_p = tm1 && tm2 && tm1->sec == tm2->sec && tm1->usec == tm2->usec; return mrb_bool_value(eq_p); @@ -312,8 +312,8 @@ mrb_time_cmp(mrb_state *mrb, mrb_value self) struct mrb_time *tm1, *tm2; mrb_get_args(mrb, "o", &other); - tm1 = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); - tm2 = (struct mrb_time *)mrb_get_datatype(mrb, other, &mrb_time_type); + tm1 = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); + tm2 = (struct mrb_time*)mrb_data_get_ptr(mrb, other, &mrb_time_type); if (!tm1 || !tm2) return mrb_nil_value(); if (tm1->sec > tm2->sec) { return mrb_fixnum_value(1); @@ -338,7 +338,7 @@ mrb_time_plus(mrb_state *mrb, mrb_value self) struct mrb_time *tm; mrb_get_args(mrb, "f", &f); - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); return mrb_time_make(mrb, mrb_obj_class(mrb, self), (double)tm->sec+f, tm->usec, tm->timezone); } @@ -351,10 +351,10 @@ mrb_time_minus(mrb_state *mrb, mrb_value self) struct mrb_time *tm, *tm2; mrb_get_args(mrb, "o", &other); - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); - tm2 = (struct mrb_time *)mrb_get_datatype(mrb, other, &mrb_time_type); + tm2 = (struct mrb_time*)mrb_data_get_ptr(mrb, other, &mrb_time_type); if (tm2) { f = (mrb_float)(tm->sec - tm2->sec) + (mrb_float)(tm->usec - tm2->usec) / 1.0e6; @@ -373,7 +373,7 @@ mrb_time_wday(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); return mrb_fixnum_value(tm->datetime.tm_wday); } @@ -385,7 +385,7 @@ mrb_time_yday(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time *)mrb_check_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); return mrb_fixnum_value(tm->datetime.tm_yday + 1); } @@ -397,7 +397,7 @@ mrb_time_year(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); return mrb_fixnum_value(tm->datetime.tm_year + 1900); } @@ -409,7 +409,7 @@ mrb_time_zone(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); if (tm->timezone <= MRB_TIMEZONE_NONE) return mrb_nil_value(); if (tm->timezone >= MRB_TIMEZONE_LAST) return mrb_nil_value(); @@ -426,7 +426,7 @@ mrb_time_asctime(mrb_state *mrb, mrb_value self) char buf[256]; int len; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); d = &tm->datetime; len = snprintf(buf, sizeof(buf), "%s %s %02d %02d:%02d:%02d %s%d", @@ -444,7 +444,7 @@ mrb_time_day(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); return mrb_fixnum_value(tm->datetime.tm_mday); } @@ -457,7 +457,7 @@ mrb_time_dstp(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); return mrb_bool_value(tm->datetime.tm_isdst); } @@ -470,7 +470,7 @@ mrb_time_getutc(mrb_state *mrb, mrb_value self) { struct mrb_time *tm, *tm2; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return self; tm2 = (struct mrb_time *)mrb_malloc(mrb, sizeof(*tm)); *tm2 = *tm; @@ -486,7 +486,7 @@ mrb_time_getlocal(mrb_state *mrb, mrb_value self) { struct mrb_time *tm, *tm2; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return self; tm2 = (struct mrb_time *)mrb_malloc(mrb, sizeof(*tm)); *tm2 = *tm; @@ -502,7 +502,7 @@ mrb_time_hour(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); return mrb_fixnum_value(tm->datetime.tm_hour); } @@ -517,7 +517,7 @@ mrb_time_initialize(mrb_state *mrb, mrb_value self) int n; struct mrb_time *tm; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)DATA_PTR(self); if (tm) { mrb_time_free(mrb, tm); } @@ -563,7 +563,7 @@ mrb_time_localtime(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return self; tm->timezone = MRB_TIMEZONE_LOCAL; mrb_time_update_datetime(tm); @@ -577,7 +577,7 @@ mrb_time_mday(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); return mrb_fixnum_value(tm->datetime.tm_mday); } @@ -589,7 +589,7 @@ mrb_time_min(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); return mrb_fixnum_value(tm->datetime.tm_min); } @@ -601,7 +601,7 @@ mrb_time_mon(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); return mrb_fixnum_value(tm->datetime.tm_mon + 1); } @@ -613,7 +613,7 @@ mrb_time_sec(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); return mrb_fixnum_value(tm->datetime.tm_sec); } @@ -626,7 +626,7 @@ mrb_time_to_f(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); return mrb_float_value((mrb_float)tm->sec + (mrb_float)tm->usec/1.0e6); } @@ -638,7 +638,7 @@ mrb_time_to_i(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); return mrb_fixnum_value(tm->sec); } @@ -650,7 +650,7 @@ mrb_time_usec(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); return mrb_fixnum_value(tm->usec); } @@ -662,7 +662,7 @@ mrb_time_utc(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (tm) { tm->timezone = MRB_TIMEZONE_UTC; mrb_time_update_datetime(tm); @@ -676,7 +676,7 @@ static mrb_value mrb_time_utcp(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); + tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); return mrb_bool_value(tm->timezone == MRB_TIMEZONE_UTC); } diff --git a/src/etc.c b/src/etc.c index 0b58ad67c..727915145 100644 --- a/src/etc.c +++ b/src/etc.c @@ -22,28 +22,37 @@ mrb_data_object_alloc(mrb_state *mrb, struct RClass *klass, void *ptr, const mrb return data; } -void * -mrb_get_datatype(mrb_state *mrb, mrb_value obj, const mrb_data_type *type) +void +mrb_data_check_type(mrb_state *mrb, mrb_value obj, const mrb_data_type *type) { if (mrb_special_const_p(obj) || (mrb_type(obj) != MRB_TT_DATA)) { - return NULL; + mrb_check_type(mrb, obj, MRB_TT_DATA); } if (DATA_TYPE(obj) != type) { - return NULL; + const mrb_data_type *t2 = DATA_TYPE(obj); + + if (t2) { + mrb_raisef(mrb, E_TYPE_ERROR, "wrong argument type %S (expected %S)", + mrb_str_new_cstr(mrb, t2->struct_name), mrb_str_new_cstr(mrb, type->struct_name)); + } } +} + +void * +mrb_data_check_and_get(mrb_state *mrb, mrb_value obj, const mrb_data_type *type) +{ + mrb_data_check_type(mrb, obj, type); return DATA_PTR(obj); } void * -mrb_check_datatype(mrb_state *mrb, mrb_value obj, const mrb_data_type *type) +mrb_data_get_ptr(mrb_state *mrb, mrb_value obj, const mrb_data_type *type) { if (mrb_special_const_p(obj) || (mrb_type(obj) != MRB_TT_DATA)) { - mrb_check_type(mrb, obj, MRB_TT_DATA); + return NULL; } if (DATA_TYPE(obj) != type) { - const char *etype = DATA_TYPE(obj)->struct_name; - mrb_raisef(mrb, E_TYPE_ERROR, "wrong argument type %S (expected %S)", - mrb_str_new_cstr(mrb, etype), mrb_str_new_cstr(mrb, type->struct_name)); + return NULL; } return DATA_PTR(obj); } -- cgit v1.2.3