summaryrefslogtreecommitdiffhomepage
path: root/src/etc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/etc.c')
-rw-r--r--src/etc.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/etc.c b/src/etc.c
index 51ed9ada1..eac71459c 100644
--- a/src/etc.c
+++ b/src/etc.c
@@ -8,6 +8,7 @@
#include "mruby/string.h"
#include "error.h"
#include "mruby/numeric.h"
+#include "mruby/data.h"
#ifndef FALSE
#define FALSE 0
@@ -17,13 +18,6 @@
#define TRUE 1
#endif
-void
-ruby_xfree(void *x)
-{
- //if (x)
- // vm_xfree(&mrb_objspace, x);
-}
-
struct RData*
mrb_data_object_alloc(mrb_state *mrb, struct RClass *klass, void *ptr, const struct mrb_data_type *type)
{
@@ -37,6 +31,18 @@ mrb_data_object_alloc(mrb_state *mrb, struct RClass *klass, void *ptr, const str
}
void *
+mrb_get_datatype(mrb_state *mrb, mrb_value obj, const struct mrb_data_type *type)
+{
+ if (SPECIAL_CONST_P(obj) || (mrb_type(obj) != MRB_TT_DATA)) {
+ return NULL;
+ }
+ if (DATA_TYPE(obj) != type) {
+ return NULL;
+ }
+ return DATA_PTR(obj);
+}
+
+void *
mrb_check_datatype(mrb_state *mrb, mrb_value obj, const struct mrb_data_type *type)
{
static const char mesg[] = "wrong argument type %s (expected %s)";