diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-06-24 06:11:28 -0700 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-06-24 06:11:28 -0700 |
| commit | 97c9c859d166a952f1f8cdcc3187cd005c4bebcf (patch) | |
| tree | 1113d4e8b9a6ab8bb454ae555814c90d03dafe35 /src | |
| parent | 8121e0d354b83b3fa9d1363470e280dc98112289 (diff) | |
| parent | 7778b5ca1c82062e29eb41b22839a1d174dd82e1 (diff) | |
| download | mruby-97c9c859d166a952f1f8cdcc3187cd005c4bebcf.tar.gz mruby-97c9c859d166a952f1f8cdcc3187cd005c4bebcf.zip | |
Merge pull request #313 from masamitsu-murase/fix_struct_new
Fix Struct#new and GC
Diffstat (limited to 'src')
| -rw-r--r-- | src/gc.c | 12 | ||||
| -rw-r--r-- | src/struct.c | 4 |
2 files changed, 14 insertions, 2 deletions
@@ -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; i<s->len; i++){ + mrb_gc_mark_value(mrb, s->ptr[i]); + } + } + break; +#endif + default: break; } 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); |
