diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-08-15 01:33:36 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-08-15 01:33:36 +0900 |
| commit | b225e4cc82f0e727b6175306e530efc2a59f4e95 (patch) | |
| tree | eb8a64a304a8468ec4e033cc578c4b6531966436 /src/etc.c | |
| parent | babc8d00865b86c77032cfe4d69ddfea3ac9f4ef (diff) | |
| download | mruby-b225e4cc82f0e727b6175306e530efc2a59f4e95.tar.gz mruby-b225e4cc82f0e727b6175306e530efc2a59f4e95.zip | |
redesign mruby/data.h API; use DATA_PTR() for raw data pointer, DATA_GET_PTR() to type safe retrieval (TypeError will be raised), DATA_CHECK_GET_PTR() to get nil if type mismatched
Diffstat (limited to 'src/etc.c')
| -rw-r--r-- | src/etc.c | 23 |
1 files changed, 15 insertions, 8 deletions
@@ -9,6 +9,7 @@ #include "error.h" #include "mruby/numeric.h" #include "mruby/data.h" +#include "mruby/class.h" struct RData* mrb_data_object_alloc(mrb_state *mrb, struct RClass *klass, void *ptr, const mrb_data_type *type) @@ -35,18 +36,17 @@ mrb_data_check_type(mrb_state *mrb, mrb_value obj, const mrb_data_type *type) 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)); } - } -} + else { + struct RClass *c = mrb_class(mrb, obj); -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); + mrb_raisef(mrb, E_TYPE_ERROR, "uninitialized %S (expected %S)", + mrb_obj_value(c), mrb_str_new_cstr(mrb, type->struct_name)); + } + } } void * -mrb_data_get_ptr(mrb_state *mrb, mrb_value obj, const mrb_data_type *type) +mrb_data_check_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)) { return NULL; @@ -57,6 +57,13 @@ mrb_data_get_ptr(mrb_state *mrb, mrb_value obj, const mrb_data_type *type) return DATA_PTR(obj); } +void * +mrb_data_get_ptr(mrb_state *mrb, mrb_value obj, const mrb_data_type *type) +{ + mrb_data_check_type(mrb, obj, type); + return DATA_PTR(obj); +} + mrb_value mrb_lastline_get(mrb_state *mrb) { |
