diff options
| author | Hiroshi Mimaki <[email protected]> | 2020-08-06 17:38:20 +0900 |
|---|---|---|
| committer | Hiroshi Mimaki <[email protected]> | 2020-08-06 17:38:20 +0900 |
| commit | 7f8d38bbbe89dadab9d296c76f094c56aabca9f4 (patch) | |
| tree | 10c79fb00ab3378a34abba9b4ce1d01a1b7cefd6 /mrbgems/mruby-objectspace/src | |
| parent | 1a9bdfcde5fd7c91e756747ba0565f29385115a7 (diff) | |
| parent | 11cc7bed96551fcceca5cabc1527fd944835a1a0 (diff) | |
| download | mruby-7f8d38bbbe89dadab9d296c76f094c56aabca9f4.tar.gz mruby-7f8d38bbbe89dadab9d296c76f094c56aabca9f4.zip | |
Merge master.
Diffstat (limited to 'mrbgems/mruby-objectspace/src')
| -rw-r--r-- | mrbgems/mruby-objectspace/src/mruby_objectspace.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/mrbgems/mruby-objectspace/src/mruby_objectspace.c b/mrbgems/mruby-objectspace/src/mruby_objectspace.c index b89fb0580..bded3afa8 100644 --- a/mrbgems/mruby-objectspace/src/mruby_objectspace.c +++ b/mrbgems/mruby-objectspace/src/mruby_objectspace.c @@ -2,6 +2,14 @@ #include <mruby/gc.h> #include <mruby/hash.h> #include <mruby/class.h> +#include <mruby/object.h> +#include <mruby/numeric.h> +#include <mruby/string.h> +#include <mruby/array.h> +#include <mruby/variable.h> +#include <mruby/proc.h> +#include <mruby/value.h> +#include <mruby/range.h> struct os_count_struct { mrb_int total; @@ -92,6 +100,7 @@ os_count_objects(mrb_state *mrb, mrb_value self) COUNT_TYPE(T_ENV); COUNT_TYPE(T_DATA); COUNT_TYPE(T_FIBER); + COUNT_TYPE(T_ISTRUCT); #undef COUNT_TYPE default: type = mrb_fixnum_value(i); break; @@ -104,9 +113,9 @@ os_count_objects(mrb_state *mrb, mrb_value self) } struct os_each_object_data { - mrb_value block; struct RClass *target_module; mrb_int count; + mrb_value block; }; static int @@ -121,8 +130,8 @@ os_each_object_cb(mrb_state *mrb, struct RBasic *obj, void *ud) /* filter internal objects */ switch (obj->tt) { - case MRB_TT_ENV: - case MRB_TT_ICLASS: + case MRB_TT_FREE: case MRB_TT_ENV: + case MRB_TT_BREAK: case MRB_TT_ICLASS: return MRB_EACH_OBJ_OK; default: break; @@ -158,12 +167,8 @@ os_each_object_cb(mrb_state *mrb, struct RBasic *obj, void *ud) static mrb_value os_each_object(mrb_state *mrb, mrb_value self) { - mrb_value cls = mrb_nil_value(); - struct os_each_object_data d; - mrb_get_args(mrb, "&!|C", &d.block, &cls); - - d.target_module = mrb_nil_p(cls) ? NULL : mrb_class_ptr(cls); - d.count = 0; + struct os_each_object_data d = {0}; + mrb_get_args(mrb, "&!|c", &d.block, &d.target_module); mrb_objspace_each_objects(mrb, os_each_object_cb, &d); return mrb_fixnum_value(d.count); } |
