diff options
Diffstat (limited to 'debian/vendor-h2o/deps/mruby/mrbgems/mruby-objectspace')
3 files changed, 0 insertions, 252 deletions
diff --git a/debian/vendor-h2o/deps/mruby/mrbgems/mruby-objectspace/mrbgem.rake b/debian/vendor-h2o/deps/mruby/mrbgems/mruby-objectspace/mrbgem.rake deleted file mode 100644 index fa35136..0000000 --- a/debian/vendor-h2o/deps/mruby/mrbgems/mruby-objectspace/mrbgem.rake +++ /dev/null @@ -1,5 +0,0 @@ -MRuby::Gem::Specification.new('mruby-objectspace') do |spec| - spec.license = 'MIT' - spec.author = 'mruby developers' - spec.summary = 'ObjectSpace class' -end diff --git a/debian/vendor-h2o/deps/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c b/debian/vendor-h2o/deps/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c deleted file mode 100644 index 3887091..0000000 --- a/debian/vendor-h2o/deps/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +++ /dev/null @@ -1,187 +0,0 @@ -#include <mruby.h> -#include <mruby/gc.h> -#include <mruby/hash.h> -#include <mruby/class.h> - -struct os_count_struct { - mrb_int total; - mrb_int freed; - mrb_int counts[MRB_TT_MAXDEFINE+1]; -}; - -static int -os_count_object_type(mrb_state *mrb, struct RBasic *obj, void *data) -{ - struct os_count_struct *obj_count; - obj_count = (struct os_count_struct*)data; - - obj_count->total++; - - if (mrb_object_dead_p(mrb, obj)) { - obj_count->freed++; - } - else { - obj_count->counts[obj->tt]++; - } - return MRB_EACH_OBJ_OK; -} - -/* - * call-seq: - * ObjectSpace.count_objects([result_hash]) -> hash - * - * Counts objects for each type. - * - * It returns a hash, such as: - * { - * :TOTAL=>10000, - * :FREE=>3011, - * :T_OBJECT=>6, - * :T_CLASS=>404, - * # ... - * } - * - * If the optional argument +result_hash+ is given, - * it is overwritten and returned. This is intended to avoid probe effect. - * - */ - -static mrb_value -os_count_objects(mrb_state *mrb, mrb_value self) -{ - struct os_count_struct obj_count = { 0 }; - mrb_int i; - mrb_value hash; - - if (mrb_get_args(mrb, "|H", &hash) == 0) { - hash = mrb_hash_new(mrb); - } - - if (!mrb_test(mrb_hash_empty_p(mrb, hash))) { - mrb_hash_clear(mrb, hash); - } - - mrb_objspace_each_objects(mrb, os_count_object_type, &obj_count); - - mrb_hash_set(mrb, hash, mrb_symbol_value(mrb_intern_lit(mrb, "TOTAL")), mrb_fixnum_value(obj_count.total)); - mrb_hash_set(mrb, hash, mrb_symbol_value(mrb_intern_lit(mrb, "FREE")), mrb_fixnum_value(obj_count.freed)); - - for (i = MRB_TT_FALSE; i < MRB_TT_MAXDEFINE; i++) { - mrb_value type; - switch (i) { -#define COUNT_TYPE(t) case (MRB_T ## t): type = mrb_symbol_value(mrb_intern_lit(mrb, #t)); break; - COUNT_TYPE(T_FALSE); - COUNT_TYPE(T_FREE); - COUNT_TYPE(T_TRUE); - COUNT_TYPE(T_FIXNUM); - COUNT_TYPE(T_SYMBOL); - COUNT_TYPE(T_UNDEF); - COUNT_TYPE(T_FLOAT); - COUNT_TYPE(T_CPTR); - COUNT_TYPE(T_OBJECT); - COUNT_TYPE(T_CLASS); - COUNT_TYPE(T_MODULE); - COUNT_TYPE(T_ICLASS); - COUNT_TYPE(T_SCLASS); - COUNT_TYPE(T_PROC); - COUNT_TYPE(T_ARRAY); - COUNT_TYPE(T_HASH); - COUNT_TYPE(T_STRING); - COUNT_TYPE(T_RANGE); - COUNT_TYPE(T_EXCEPTION); - COUNT_TYPE(T_FILE); - COUNT_TYPE(T_ENV); - COUNT_TYPE(T_DATA); - COUNT_TYPE(T_FIBER); -#undef COUNT_TYPE - default: - type = mrb_fixnum_value(i); break; - } - if (obj_count.counts[i]) - mrb_hash_set(mrb, hash, type, mrb_fixnum_value(obj_count.counts[i])); - } - - return hash; -} - -struct os_each_object_data { - mrb_value block; - struct RClass *target_module; - mrb_int count; -}; - -static int -os_each_object_cb(mrb_state *mrb, struct RBasic *obj, void *ud) -{ - struct os_each_object_data *d = (struct os_each_object_data*)ud; - - /* filter dead objects */ - if (mrb_object_dead_p(mrb, obj)) { - return MRB_EACH_OBJ_OK; - } - - /* filter internal objects */ - switch (obj->tt) { - case MRB_TT_ENV: - case MRB_TT_ICLASS: - return MRB_EACH_OBJ_OK; - default: - break; - } - - /* filter half baked (or internal) objects */ - if (!obj->c) return MRB_EACH_OBJ_OK; - - /* filter class kind if target module defined */ - if (d->target_module && !mrb_obj_is_kind_of(mrb, mrb_obj_value(obj), d->target_module)) { - return MRB_EACH_OBJ_OK; - } - - mrb_yield(mrb, d->block, mrb_obj_value(obj)); - ++d->count; - return MRB_EACH_OBJ_OK; -} - -/* - * call-seq: - * ObjectSpace.each_object([module]) {|obj| ... } -> fixnum - * - * Calls the block once for each object in this Ruby process. - * Returns the number of objects found. - * If the optional argument +module+ is given, - * calls the block for only those classes or modules - * that match (or are a subclass of) +module+. - * - * If no block is given, ArgumentError is raised. - * - */ - -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); - - if (mrb_nil_p(d.block)) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "Expected block in ObjectSpace.each_object."); - } - - d.target_module = mrb_nil_p(cls) ? NULL : mrb_class_ptr(cls); - d.count = 0; - mrb_objspace_each_objects(mrb, os_each_object_cb, &d); - return mrb_fixnum_value(d.count); -} - -void -mrb_mruby_objectspace_gem_init(mrb_state *mrb) -{ - struct RClass *os = mrb_define_module(mrb, "ObjectSpace"); - mrb_define_class_method(mrb, os, "count_objects", os_count_objects, MRB_ARGS_OPT(1)); - mrb_define_class_method(mrb, os, "each_object", os_each_object, MRB_ARGS_OPT(1)); -} - -void -mrb_mruby_objectspace_gem_final(mrb_state *mrb) -{ -} diff --git a/debian/vendor-h2o/deps/mruby/mrbgems/mruby-objectspace/test/objectspace.rb b/debian/vendor-h2o/deps/mruby/mrbgems/mruby-objectspace/test/objectspace.rb deleted file mode 100644 index 4731d53..0000000 --- a/debian/vendor-h2o/deps/mruby/mrbgems/mruby-objectspace/test/objectspace.rb +++ /dev/null @@ -1,60 +0,0 @@ -assert('ObjectSpace.count_objects') do - h = {} - f = Fiber.new {} if Object.const_defined? :Fiber - ObjectSpace.count_objects(h) - assert_kind_of(Hash, h) - assert_true(h.keys.all? {|x| x.is_a?(Symbol) || x.is_a?(Integer) }) - assert_true(h.values.all? {|x| x.is_a?(Integer) }) - - assert_true(h.has_key?(:TOTAL)) - assert_true(h.has_key?(:FREE)) - assert_true(h.has_key?(:T_FIBER)) if Object.const_defined? :Fiber - - assert_equal(h[:TOTAL] * 2, h.values.reduce(:+)) - - h = ObjectSpace.count_objects - assert_kind_of(Hash, h) - assert_true(h.keys.all? {|x| x.is_a?(Symbol) || x.is_a?(Integer) }) - assert_true(h.values.all? {|x| x.is_a?(Integer) }) - - assert_raise(TypeError) { ObjectSpace.count_objects(1) } - - h0 = {:T_FOO=>1000} - h = ObjectSpace.count_objects(h0) - assert_false(h0.has_key?(:T_FOO)) - - GC.start - h_after = {} - h_before = ObjectSpace.count_objects - - objs = [] - 1000.times do - objs << {} - end - objs = nil - ObjectSpace.count_objects(h) - GC.start - ObjectSpace.count_objects(h_after) - - assert_equal(h[:T_HASH], h_before[:T_HASH] + 1000) - assert_equal(h_after[:T_HASH], h_before[:T_HASH]) -end - -assert('ObjectSpace.each_object') do - objs = [] - objs_count = ObjectSpace.each_object { |obj| - objs << obj - } - assert_equal objs.length, objs_count - - arys = [] - arys_count = ObjectSpace.each_object(Array) { |obj| - arys << obj - } - assert_equal arys.length, arys_count - assert_true arys.length < objs.length -end - -assert 'Check class pointer of ObjectSpace.each_object.' do - ObjectSpace.each_object { |obj| !obj } -end |