From 7a17377c644d421fae71bd8d61e6f7dc744faf62 Mon Sep 17 00:00:00 2001 From: Masamitsu MURASE Date: Sun, 24 Jun 2012 04:06:53 +0900 Subject: Fix Struct.new and Struct.[]. Instances of Struct's subclass should have MRB_TT_STRUCT. --- src/struct.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/struct.c b/src/struct.c index 855974182..25cd02d3d 100644 --- a/src/struct.c +++ b/src/struct.c @@ -286,8 +286,8 @@ make_struct(mrb_state *mrb, mrb_value name, mrb_value members, struct RClass * k nstr = mrb_obj_value(c); mrb_iv_set(mrb, nstr, mrb_intern(mrb, "__members__"), members); - mrb_define_class_method(mrb, c, "new", mrb_class_new_instance_m, ARGS_ANY()); - mrb_define_class_method(mrb, c, "[]", mrb_class_new_instance_m, ARGS_ANY()); + mrb_define_class_method(mrb, c, "new", mrb_instance_new, ARGS_ANY()); + mrb_define_class_method(mrb, c, "[]", mrb_instance_new, ARGS_ANY()); mrb_define_class_method(mrb, c, "members", mrb_struct_s_members_m, ARGS_NONE()); //RSTRUCT(nstr)->basic.c->super = c->c; ptr_members = RARRAY_PTR(members); -- cgit v1.2.3 From 7778b5ca1c82062e29eb41b22839a1d174dd82e1 Mon Sep 17 00:00:00 2001 From: Masamitsu MURASE Date: Sun, 24 Jun 2012 06:28:17 +0900 Subject: Implement garbage collection for struct. --- src/gc.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src') diff --git a/src/gc.c b/src/gc.c index a7537a015..a17cd64c8 100644 --- a/src/gc.c +++ b/src/gc.c @@ -430,6 +430,18 @@ gc_mark_children(mrb_state *mrb, struct RBasic *obj) break; #endif +#ifdef ENABLE_STRUCT + case MRB_TT_STRUCT: + { + struct RStruct *s = (struct RStruct*)obj; + long i; + for (i=0; ilen; i++){ + mrb_gc_mark_value(mrb, s->ptr[i]); + } + } + break; +#endif + default: break; } -- cgit v1.2.3