From 1deb31320a480b1863885743ab344a602062c43a Mon Sep 17 00:00:00 2001 From: Masamitsu MURASE Date: Sun, 24 Jun 2012 15:15:55 +0900 Subject: Modify instance tt. --- src/class.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src') diff --git a/src/class.c b/src/class.c index 881a0072e..53e603aeb 100644 --- a/src/class.c +++ b/src/class.c @@ -1050,6 +1050,9 @@ mrb_class_new(mrb_state *mrb, struct RClass *super) mrb_check_inheritable(mrb, super); } c = boot_defclass(mrb, super); + if (super){ + MRB_SET_INSTANCE_TT(c, MRB_INSTANCE_TT(super)); + } make_metaclass(mrb, c); return c; -- cgit v1.2.3 From 9a1f58874953e37af538a8fde3792817a88e4e1c Mon Sep 17 00:00:00 2001 From: Masamitsu MURASE Date: Sun, 24 Jun 2012 17:29:41 +0900 Subject: Modify obj_free to free instances of Struct. --- src/gc.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src') diff --git a/src/gc.c b/src/gc.c index a7537a015..23d22765c 100644 --- a/src/gc.c +++ b/src/gc.c @@ -502,6 +502,12 @@ obj_free(mrb_state *mrb, struct RBasic *obj) mrb_free(mrb, ((struct RRange*)obj)->edges); break; +#ifdef ENABLE_STRUCT + case MRB_TT_STRUCT: + mrb_free(mrb, ((struct RStruct*)obj)->ptr); + break; +#endif + case MRB_TT_DATA: { struct RData *d = (struct RData*)obj; -- cgit v1.2.3 From e53eea76eb1da7cb9b5b2da52e3244a0f521972a Mon Sep 17 00:00:00 2001 From: Masamitsu MURASE Date: Sun, 24 Jun 2012 17:38:20 +0900 Subject: Modify gc_gray_mark for Struct. --- src/gc.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src') diff --git a/src/gc.c b/src/gc.c index 23d22765c..1010a6749 100644 --- a/src/gc.c +++ b/src/gc.c @@ -626,6 +626,15 @@ gc_gray_mark(mrb_state *mrb, struct RBasic *obj) break; #endif +#ifdef ENABLE_STRUCT + case MRB_TT_STRUCT: + { + struct RStruct *s = (struct RStruct*)obj; + children += s->len; + } + break; +#endif + default: break; } -- cgit v1.2.3