summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-objectspace
diff options
context:
space:
mode:
authorcremno <[email protected]>2014-01-31 17:34:28 +0100
committercremno <[email protected]>2014-01-31 17:42:05 +0100
commita2cfc9a9af55f9ec1f7bd413ac3611dec3db0f1e (patch)
tree2fcfd62d8d9555e906a053839e5a6d5a3a9c595d /mrbgems/mruby-objectspace
parent7c9a1accff4c42ec781f14b1ba5abaf0ad1bb037 (diff)
downloadmruby-a2cfc9a9af55f9ec1f7bd413ac3611dec3db0f1e.tar.gz
mruby-a2cfc9a9af55f9ec1f7bd413ac3611dec3db0f1e.zip
rework mruby-objectspace and gc.[ch]
- functions should have C linkage (for C++ code) - add prefix to each_object_callback - use more appropriate variable types / initialization - ObjectSpace::count_objects has 1 opt. arg. - prefer mrb_intern_lit to mrb_intern_cstr for str. lit. - mruby/value.h is included by mruby.h - adjust coding style
Diffstat (limited to 'mrbgems/mruby-objectspace')
-rw-r--r--mrbgems/mruby-objectspace/src/mruby_objectspace.c46
1 files changed, 21 insertions, 25 deletions
diff --git a/mrbgems/mruby-objectspace/src/mruby_objectspace.c b/mrbgems/mruby-objectspace/src/mruby_objectspace.c
index ac6189ded..538959f2a 100644
--- a/mrbgems/mruby-objectspace/src/mruby_objectspace.c
+++ b/mrbgems/mruby-objectspace/src/mruby_objectspace.c
@@ -1,23 +1,23 @@
#include <mruby.h>
#include <mruby/gc.h>
#include <mruby/hash.h>
-#include <mruby/value.h>
struct os_count_struct {
- size_t total;
- size_t freed;
- size_t counts[MRB_TT_MAXDEFINE+1];
+ mrb_int total;
+ mrb_int freed;
+ mrb_int counts[MRB_TT_MAXDEFINE+1];
};
-void
-os_count_object_type(mrb_state *mrb, struct RBasic* obj, void *data)
+static void
+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);
+ struct os_count_struct *obj_count;
+ obj_count = (struct os_count_struct*)data;
if (is_dead(mrb, obj)) {
obj_count->freed++;
- } else {
+ }
+ else {
obj_count->counts[obj->tt]++;
obj_count->total++;
}
@@ -43,11 +43,11 @@ os_count_object_type(mrb_state *mrb, struct RBasic* obj, void *data)
*
*/
-mrb_value
+static mrb_value
os_count_objects(mrb_state *mrb, mrb_value self)
{
- struct os_count_struct obj_count;
- size_t i;
+ struct os_count_struct obj_count = { 0 };
+ enum mrb_vtype i;
mrb_value hash;
if (mrb_get_args(mrb, "|H", &hash) == 0) {
@@ -58,21 +58,15 @@ os_count_objects(mrb_state *mrb, mrb_value self)
mrb_hash_clear(mrb, hash);
}
- for (i = 0; i <= MRB_TT_MAXDEFINE; i++) {
- obj_count.counts[i] = 0;
- }
- obj_count.total = 0;
- obj_count.freed = 0;
-
mrb_objspace_each_objects(mrb, os_count_object_type, &obj_count);
- mrb_hash_set(mrb, hash, mrb_symbol_value(mrb_intern_cstr(mrb, "TOTAL")), mrb_fixnum_value(obj_count.total));
- mrb_hash_set(mrb, hash, mrb_symbol_value(mrb_intern_cstr(mrb, "FREE")), mrb_fixnum_value(obj_count.freed));
+ 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 = 0; i < MRB_TT_MAXDEFINE; i++) {
+ for (i = MRB_TT_FALSE; i < MRB_TT_MAXDEFINE; i++) {
mrb_value type;
switch (i) {
-#define COUNT_TYPE(t) case (t): type = mrb_symbol_value(mrb_intern_cstr(mrb, #t)); break;
+#define COUNT_TYPE(t) case (t): type = mrb_symbol_value(mrb_intern_lit(mrb, #t)); break;
COUNT_TYPE(MRB_TT_FALSE);
COUNT_TYPE(MRB_TT_FREE);
COUNT_TYPE(MRB_TT_TRUE);
@@ -107,11 +101,13 @@ os_count_objects(mrb_state *mrb, mrb_value self)
}
void
-mrb_mruby_objectspace_gem_init(mrb_state* mrb) {
+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_ANY());
+ mrb_define_class_method(mrb, os, "count_objects", os_count_objects, MRB_ARGS_OPT(1));
}
void
-mrb_mruby_objectspace_gem_final(mrb_state* mrb) {
+mrb_mruby_objectspace_gem_final(mrb_state *mrb)
+{
}