summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-06-25 17:30:28 +0900
committerYukihiro Matsumoto <[email protected]>2012-06-25 17:30:28 +0900
commit8dc533ed5f5f4e63ef4b8391bfbe0dbb3b34052f (patch)
treef3995b70acb9f3946a61d47f830235b082c6b59a /src
parent19638ded7367520333caf1b070b221ea18e4c352 (diff)
parent52b6d1c001bf9efb73aa6d58520e1444dbf4812d (diff)
downloadmruby-8dc533ed5f5f4e63ef4b8391bfbe0dbb3b34052f.tar.gz
mruby-8dc533ed5f5f4e63ef4b8391bfbe0dbb3b34052f.zip
Merge branch 'master' of github.com:mruby/mruby
Diffstat (limited to 'src')
-rw-r--r--src/class.c3
-rw-r--r--src/gc.c15
2 files changed, 18 insertions, 0 deletions
diff --git a/src/class.c b/src/class.c
index cda7ce643..071d7aebe 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;
diff --git a/src/gc.c b/src/gc.c
index bf45ffcd3..93085db61 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -514,6 +514,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;
@@ -632,6 +638,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;
}